在 Oracle 11gR2 中,如何使用 NESTED TABLE 创建 TABLE of "Type with NESTED TABLE "?
In Oracle 11gR2, how to CREATE TABLE of "Type with NESTED TABLE " with NESTED TABLE?
在你提出任何问题之前,是的,我正在做一些家庭作业(大学类)。
我正在处理 Oracle 11gR2 中的嵌套 Tables,我有这段代码,显然它不起作用(但为什么不呢?)。我觉得少了什么:
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;
使用此代码,我在 Oracle 中出现此错误:[99999][2320] ORA-02320: failure in creating storage table for nested table column ADDENDUMS
。但我想我创建 table 的方式与 tStaff table (CREATE OR REPLACE TYPE tStaff AS TABLE OF Staff;
).
中的方式相同
还有。我在这个问题 (How do I create an Oracle table with nested tables of object types?) 中看到,我可能必须在上一个 table:
中添加内部嵌套 Table
CREATE TABLE AgreementsInter OF AgreementInter
嵌套 TABLE 附录存储为 addendums_nt
(嵌套 TABLE 员工存储为 addendums_staff_members_nt);
但是 Oracle 说同样的错误:[99999][2320] ORA-02320: failure in creating storage table for nested table column ADDENDUMS
。
有一个小费(staff_members 而不是工作人员)和名称更改(键入 tAgreementInter 而不是 AgreementInter)我建议最后两个步骤:
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)
;
这是一个 db-fiddle 来证明它有效。
在你提出任何问题之前,是的,我正在做一些家庭作业(大学类)。 我正在处理 Oracle 11gR2 中的嵌套 Tables,我有这段代码,显然它不起作用(但为什么不呢?)。我觉得少了什么:
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;
使用此代码,我在 Oracle 中出现此错误:[99999][2320] ORA-02320: failure in creating storage table for nested table column ADDENDUMS
。但我想我创建 table 的方式与 tStaff table (CREATE OR REPLACE TYPE tStaff AS TABLE OF Staff;
).
还有。我在这个问题 (How do I create an Oracle table with nested tables of object types?) 中看到,我可能必须在上一个 table:
中添加内部嵌套 TableCREATE TABLE AgreementsInter OF AgreementInter 嵌套 TABLE 附录存储为 addendums_nt (嵌套 TABLE 员工存储为 addendums_staff_members_nt);
但是 Oracle 说同样的错误:[99999][2320] ORA-02320: failure in creating storage table for nested table column ADDENDUMS
。
有一个小费(staff_members 而不是工作人员)和名称更改(键入 tAgreementInter 而不是 AgreementInter)我建议最后两个步骤:
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)
;
这是一个 db-fiddle 来证明它有效。