Supertipo de subtipo com a criação do tipo de objeto Oracle. Limite para o número de subtipos?
Pergunta
Eu encontrei um problema ao criar um tipo de objeto no Oracle 10G que herda de um supertipo. Atualmente, temos muitos tipos de objetos que herdam deste supertipo e, recentemente, o compilador começou a jogar os seguintes erros
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
Existe um limite no número de subtipos que você pode gerar que herda a partir de um supertipo?
Solução
Quando você cria tabelas com colunas com base em tipos definidos pelo usuário, o Oracle cria colunas "secretas" adicionais para você sob as cobertas. Por exemplo:
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.
Essa mesa parece ter 2 colunas:
SQL> desc emp_data_table
Name Null? Type
-------------------------- -------- ------------------------
ID NUMBER(38)
EMP_DATA EMP_DATA_T
... mas isso verdade tem quatro:
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 você viu, o Oracle tem um limite de 1000 colunas por tabela. Esse limite incluirá qualquer uma dessas colunas ocultas derivadas de tipos e supertipo. Parece que sua tabela excedeu esse limite.
Outras dicas
Use comando:
PURGE RECYCLEBIN;