具有Oracle对象类型创建的子类型超类型。限制子类型的数量?

时间:2010-01-20 13:35:31

标签: oracle object oracle10g subtype supertype

在Oracle 10g中创建一个继承自超类型的对象类型时,我遇到了一个问题。我们目前有许多继承自这个超类型的对象类型,最近编译器开始抛出以下错误

ORA-30745: error occured while trying to add column "SYS_NC_ROWINFO$" in table "DATA_CACHE.CACHE_ENTRIES"

ORA-01792: maximum number of columns in a table or view is 1000

您可以生成从超类型继承的子类型数量上限吗?

2 个答案:

答案 0 :(得分:3)

当您使用基于用户定义类型的列创建表时,Oracle会为您创建额外的“秘密”列。例如:

SQL> create type emp_data_t  as object (empno number, ename varchar2(30));
  2  /

Type created.

SQL> create table emp_data_table (id int, emp_data emp_data_t);

Table created.

此表显示以包含2列:

SQL> desc emp_data_table
 Name                       Null?    Type
 -------------------------- -------- ------------------------
 ID                                  NUMBER(38)
 EMP_DATA                            EMP_DATA_T

...但真的有四个:

SQL> select name
  2  from sys.col$
  3  where obj# = (select object_id 
  4                from user_objects 
  5                where object_name='EMP_DATA_TABLE');

NAME
------------------------------
ID
EMP_DATA
SYS_NC00003$
SYS_NC00004$

如您所见,Oracle每个表的限制为1000列。此限制将包括从类型和超类型派生的任何这些隐藏列。看起来您的表已超出此限制。

答案 1 :(得分:-1)

使用命令:

PURGE RECYCLEBIN;