我有一个家庭作业问题,我被困在B部分。我已经完成了A部分的工作,但是没有问题,但是B部分一直出错。
A。使用属性COUNTRY_CODE,AREA_CODE和PHONE_NUMBER定义一个名为phone_type的用户定义对象类型数据类型。
B。将用户定义的名为Phone_List_type的VARRAY数据类型定义为大小为phone_type类型三的数组。
回答A:
CREATE TYPE phone_type AS OBJECT (country_code Number, area_code Number, phone_number Number);
结果:输入已编译的phone_type
B的答案
CREATE TYPE phone_list_type AS VARRAY(3) of phone_type;
错误消息:名称已存在于对象中
答案 0 :(得分:0)
在重新创建phone_list_type之前,请尝试对其进行删除。问题出现了 当您已经编译了定义类型的代码,并且想要更改它(代码/定义)时,例如
SQL> CREATE TYPE phone_type AS OBJECT (
2 country_code Number
3 , area_code Number
4 , phone_number Number
5 );
6 /
Type PHONE_TYPE compiled
SQL> CREATE TYPE phone_list_type AS VARRAY(3) of phone_type;
2 /
Type PHONE_LIST_TYPE compiled
SQL> CREATE TYPE phone_list_type AS VARRAY(3) of phone_type;
2 /
Error starting at line : 1 in command -
CREATE TYPE phone_list_type AS VARRAY(3) of phone_type;
Error report -
ORA-00955: name is already used by an existing object
00955. 00000 - "name is already used by an existing object"
*Cause:
*Action:
Oracle不仅会“覆盖”现有的TYPE定义。现在,您可以删除类型并使用新的定义:
SQL> drop type phone_list_type;
Type PHONE_LIST_TYPE dropped.
SQL> CREATE TYPE phone_list_type AS VARRAY(3) of phone_type;
2 /
Type PHONE_LIST_TYPE compiled
如果DROP TYPE ...不起作用,您也可以强制执行 (请参阅documentation)。
答案 1 :(得分:0)
使用CREATE OR REPLACE TYPE
代替CREATE TYPE
:
CREATE OR REPLACE TYPE phone_list_type AS VARRAY(3) of phone_type;