Création avec Supertype Sous-type Oracle Type d'objet. Limitation du nombre de sous-types?
Question
J'ai rencontré un problème lors de la création d'un type d'objet dans Oracle 10g qui hérite d'un super-type. Nous avons actuellement de nombreux types d'objets qui héritent de ce supertype et, récemment, le compilateur a commencé à jeter les erreurs suivantes
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
Y at-il un plafond sur le nombre de sous-types que vous pouvez générer héritant d'un supertype?
La solution
Lorsque vous créez des tables avec des colonnes en fonction de types définis par l'utilisateur, Oracle crée des colonnes « secrètes » supplémentaires pour vous sous les couvertures. Par exemple:
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.
Ce tableau apparaît pour avoir 2 colonnes:
SQL> desc emp_data_table
Name Null? Type
-------------------------- -------- ------------------------
ID NUMBER(38)
EMP_DATA EMP_DATA_T
... mais vraiment a quatre:
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$
Comme vous l'avez vu, Oracle a une limite de 1000 colonnes par table. Cette limite comprendra une de ces colonnes cachées dérivées de types et supertypes. Il ressemble à votre table a dépassé cette limite.
Autres conseils
commande use:
PURGE RECYCLEBIN;