Subtipo Supertype con Oracle objeto Tipo Creación. Límite en el número de subtipos?
Pregunta
Me han topado con un problema al crear un tipo de objeto en Oracle 10g que se hereda de un supertipo. Actualmente tenemos muchos tipos de objetos que heredan de este supertipo y, recientemente, el compilador comenzó a lanzar los siguientes errores
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
¿Hay un límite en el número de subtipos puede generar que heredan de un supertipo?
Solución
Cuando se crea tablas con columnas basadas en tipos definidos por el usuario, Oracle crea columnas adicionales "secretos" para que bajo las sábanas. Por ejemplo:
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.
Esta tabla aparece para tener 2 columnas:
SQL> desc emp_data_table
Name Null? Type
-------------------------- -------- ------------------------
ID NUMBER(38)
EMP_DATA EMP_DATA_T
... pero realmente tiene cuatro:
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$
Como se ha visto, Oracle tiene un límite de 1000 columnas por tabla. Este límite incluirá cualquiera de estas columnas ocultos derivados de tipos y supertipos. Parece que tu mesa ha superado este límite.
Otros consejos
Comando de uso:
PURGE RECYCLEBIN;