【问题标题】:In Oracle 11gR2, how to CREATE TABLE of "Type with NESTED TABLE " with NESTED TABLE?在 Oracle 11gR2 中,如何使用 NESTED TABLE 创建“Type with NESTED TABLE”的表?
【发布时间】:2020-09-30 08:54:09
【问题描述】:

在你提出任何问题之前,是的,我正在做一些功课(大学类)。 我正在处理 Oracle 11gR2 中的嵌套表,并且我有这段代码,显然它不起作用(但为什么不呢?)。我认为缺少一些东西:

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。但我认为我创建表的方式与在 tStaff 表 (CREATE OR REPLACE TYPE tStaff AS TABLE OF Staff;) 中相同。

还有。我在这个问题 (How do I create an Oracle table with nested tables of object types?) 中看到,我可能必须在最后一个表中添加内部嵌套表:

CREATE TABLE AgreementsInter OF AgreementInter NESTED TABLE 附录存储为 addendums_nt (NESTED TABLE 工作人员存储为 addendums_staff_members_nt);

但是 Oracle 说同样的错误:[99999][2320] ORA-02320: failure in creating storage table for nested table column ADDENDUMS

【问题讨论】:

    标签: oracle oracle11g user-defined-types


    【解决方案1】:

    我建议最后两个步骤有一个提示(staff_members 而不是 staffmembers)和一个名称更改(输入 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 表明它有效。

    【讨论】:

    • 完美!!非常感谢!
    猜你喜欢
    • 2018-03-21
    • 1970-01-01
    • 2011-08-23
    • 2021-08-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多