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?

¿Fue útil?

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;
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top