No Oracle 11gR2, como CRIAR TABELA de “Type with NESTED TABLE” com NESTED TABLE?
Antes de qualquer dúvida, sim, estou fazendo um dever de casa (tipo universitário). Estou lidando com tabelas aninhadas no Oracle 11gR2 e tenho esse código, que não está funcionando, obviamente (mas por que não?). Acho que falta algo:
CREATE OR REPLACE TYPE subjects AS VARRAY(20) OF VARCHAR2(100);
CREATE OR REPLACE TYPE Person AS OBJECT(
name VARCHAR2(30),
last_name VARCHAR2(128),
id_card VARCHAR2(9)
) NOT FINAL;
CREATE OR REPLACE TYPE Student UNDER Person (
id_college VARCHAR2(10),
enrolled_subjects subjects
);
CREATE TABLE Students OF Student;
CREATE OR REPLACE TYPE Student_List AS VARRAY(5) OF REF Student;
CREATE OR REPLACE TYPE PDI UNDER Person (
id_university VARCHAR2(10),
depto VARCHAR2(50),
date_incorporation TIMESTAMP
);
CREATE TABLE PDIs OF PDI;
CREATE OR REPLACE TYPE Staff UNDER Person () FINAL;
CREATE TABLE Staff_Members OF Staff;
CREATE OR REPLACE TYPE tStaff AS TABLE OF Staff;
CREATE OR REPLACE TYPE Addendum AS OBJECT (
idCode VARCHAR2(10),
sign_date TIMESTAMP,
students student_list,
staff_members tStaff,
professor REF PDI
) FINAL;
CREATE TABLE Addendums OF Addendum
NESTED TABLE staff_members STORE AS staffmembers_nt;
CREATE OR REPLACE TYPE tAddendum AS TABLE OF Addendum;
-- UNTIL HERE EVERYTHING'S OK
CREATE OR REPLACE TYPE AgreementInter AS OBJECT (
idCode VARCHAR2(10),
manager_name VARCHAR2(30),
manager_last_name VARCHAR2(128),
addendums tAddendum
) FINAL;
CREATE TABLE AgreementsInter OF AgreementInter
NESTED TABLE addendums STORE AS addendums_nt;
Com este código eu tenho esse erro no Oracle: [99999][2320] ORA-02320: failure in creating storage table for nested table column ADDENDUMS. Mas acho que criei a tabela da mesma forma que na tabela tStaff ( CREATE OR REPLACE TYPE tStaff AS TABLE OF Staff;).
Além disso. Eu vi nesta pergunta ( como faço para criar uma tabela Oracle com tabelas aninhadas de tipos de objeto? ) Que posso ter que adicionar tabela aninhada interna na minha última tabela:
CREATE TABLE AgreementsInter OF AgreementInter NESTED TABLE addendums STORE AS addendums_nt (NESTED TABLE staffmembers STORE AS addendums_staff_members_nt);
Mas, então, a Oracle diz o mesmo erro: [99999][2320] ORA-02320: failure in creating storage table for nested table column ADDENDUMS.
Respostas
Há um tippo (staff_members em vez de staffmembers) e uma mudança de nome (digite tAgreementInter em vez de AgreementInter), sugiro para as duas últimas etapas:
CREATE OR REPLACE TYPE tAgreementInter AS OBJECT (
idCode VARCHAR2(10),
manager_name VARCHAR2(30),
manager_last_name VARCHAR2(128),
addendums tAddendum
) FINAL;
CREATE TABLE AgreementsInter OF tAgreementInter
NESTED TABLE addendums STORE AS addendums_nt
(NESTED TABLE staff_members STORE AS addendums_staff_members_nt)
;
Aqui está um db-fiddle para mostrar que funciona.