【问题标题】:Oracle TYPE declaration throwing error PLS-00201 - identifier must be declaredOracle TYPE 声明抛出错误 PLS-00201 - 必须声明标识符
【发布时间】: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 用户一个接一个地执行的。请帮忙。

【问题讨论】:

标签: oracle stored-procedures plsql types


【解决方案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。很好的建议。
  • 快速解答!!。也节省了我的时间
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-06-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-12-17
  • 2021-12-22
  • 2016-07-25
相关资源
最近更新 更多