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

时间:2018-01-25 14:27:59

标签: oracle stored-procedures plsql types

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

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

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

create or replace 
TYPE "SharedAccountRecTypeCollection" 
as table of SharedAccountRecType

错误:PLS-00201:标识符' SHAREDACCOUNTRECTYPE'必须宣布。

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

2 个答案:

答案 0 :(得分:2)

之所以发生这种情况,是因为你使用""在类型名称。

在Oracle名称" SharedAccountRecType"和SharedAccountRecType不同。

不要在""中使用名称,因为#34;"中的Oracle威胁名称区分大小写,但没有""作为不区分大小写的案例。

答案 1 :(得分:2)

如果您使用双引号,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"