创建一个Varray

时间:2019-07-07 01:01:11

标签: oracle plsql

我有一个家庭作业问题,我被困在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;
  

错误消息:名称已存在于对象中

2 个答案:

答案 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;