当您使用基于用户定义类型的列创建表时,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列的限制。此限制将包括从类型和超类型派生的任何隐藏列。它看起来像你的表超过了这个限制。