Oracle TYPE 声明抛出错误 PLS-00201 - 必须声明标识符

Posted

技术标签:

【中文标题】Oracle TYPE 声明抛出错误 PLS-00201 - 必须声明标识符【英文标题】:Oracle TYPE declaration throwing error PLS-00201 - identifier must be declared 【发布时间】:2018-01-25 14:27:59 【问题描述】:

我使用以下命令成功创建了一个对象类型:

create or replace 
TYPE  "SharedAccountRecType" AS object(
 account_id NUMBER(11),
 share_by_id NUMBER(11),
 share_to_id NUMBER(11)
);

然后我尝试创建另一个类型作为上面成功创建的对象类型的表。下面的命令抛出错误:

create or replace 
TYPE "SharedAccountRecTypeCollection" 
as table of SharedAccountRecType

错误:PLS-00201:必须声明标识符“SHAREDACCOUNTRECTYPE”。

以上两个命令都是使用同一个 Oracle 用户一个接一个地执行的。请帮忙。

【问题讨论】:

试试create or replace TYPE "SharedAccountRecTypeCollection" as table of "SharedAccountRecType" 参见 ***.com/a/35556194/1509264 或 ***.com/questions/36559222/… - 您通过在标识符中使用双引号和小写字符来强制区分大小写 - 您需要继续使用双引号,并且在使用该标识符的任何地方都使用相同的大小写. 【参考方案1】:

如果您使用双引号,Oracle 将使用您键入的确切名称创建一个类型,区分大小写。 例如:

SQL> create or replace
  2  TYPE  "SharedAccountRecType" AS object(
  3   account_id NUMBER(11),
  4   share_by_id NUMBER(11),
  5   share_to_id NUMBER(11)
  6  );
  7  /

Type created.

SQL> create or replace
  2  TYPE  SharedAccountRecType AS object(
  3   account_id NUMBER(11),
  4   share_by_id NUMBER(11),
  5   share_to_id NUMBER(11)
  6  );
  7  /

Type created.

SQL> select type_name
  2  from user_types
  3  where upper(type_name) = 'SHAREDACCOUNTRECTYPE';

TYPE_NAME
------------------------------
SHAREDACCOUNTRECTYPE
SharedAccountRecType

SQL>

鉴于此,您可能希望从 SharedAccountRecType 的创建中删除双引号:

create or replace  TYPE  SharedAccountRecType AS object ...
create or replace ... as table of SharedAccountRecType

或在创建表类型时添加它们,具体取决于您是否需要区分大小写的名称

create or replace  TYPE  "SharedAccountRecType" AS object ...
create or replace ... as table of "SharedAccountRecType"

【讨论】:

谢谢@Aleksej,问题是我在创建对象“SharedAccountRecType”时使用了双引号,但我没有使用创建SharedAccountRecType 类型表的双引号。阅读您的答案后,我到处都尝试了 Quotes 并且它确实有效。万分感谢。昨晚我浪费了 3 个小时试图了解出了什么问题。【参考方案2】:

这是因为你在类型名称中使用了“”。

在 Oracle 中,“SharedAccountRecType”和 SharedAccountRecType 名称不同。

不要在“”中使用名称,因为“”中的 Oracle 威胁名称区分大小写,而没有“”的名称则不区分大小写。

【讨论】:

谢谢@Vladimir。很好的建议。 快速解答!!。也节省了我的时间

以上是关于Oracle TYPE 声明抛出错误 PLS-00201 - 必须声明标识符的主要内容,如果未能解决你的问题,请参考以下文章

Oracle中RAISE异常

PLS-00201:必须声明标识符“TYPE”

oracle异常(-)

Oracle 创建视图时抛出 SQL 错误

NHibernate 查询参数解析器在 '/*[1]/@type' 表达式上抛出错误

mysql错误-表名抛出未声明的变量