【问题标题】:Error While Creating Nested Table in Oracle在 Oracle 中创建嵌套表时出错
【发布时间】:2019-10-02 05:17:43
【问题描述】:

下面是我创建的表格。

CREATE TYPE ft_obj AS OBJECT (
    ftid         NUMBER(5),
    ftlocation   VARCHAR(30),
    country      VARCHAR(10)
);
/

CREATE TABLE ft_table OF ft_obj (
    ftid PRIMARY KEY
) OBJECT IDENTIFIER IS PRIMARY KEY;
/

CREATE TYPE frod_obj AS OBJECT (
    prodid           NUMBER(6),
    ft_ref           ft_obj,
    proddesc         VARCHAR(50),
    costperitem      DECIMAL,
    labcostperitem   DECIMAL
);
/

CREATE TABLE frod_table OF frod_obj (
    prodid PRIMARY KEY
) OBJECT IDENTIFIER IS PRIMARY KEY;

CREATE TYPE wf_obj AS OBJECT (
    wfid           NUMBER,
    ft_ref         ft_obj,
    wfname         VARCHAR(30),
    taxcode        INT,
    yearlyincome   DECIMAL,
    yearlytax      DECIMAL
);
/

CREATE TABLE wf_table OF wf_obj (
    wfid PRIMARY KEY
) OBJECT IDENTIFIER IS PRIMARY KEY;
/

CREATE TYPE wfusage_obj AS OBJECT (
    jobdate         DATE,
    jobhours        INT,
    jobhourlyrate   DECIMAL,
    jobposted       CHAR,
    wfid_ref        REF wf_obj
);
/

CREATE TYPE wfusage_nesttabtyp AS
    TABLE OF wfusage_obj;
/

CREATE TABLE wfusage_objtab OF wfusage_obj;
/

CREATE TYPE odetails_obj AS OBJECT (
    mfid           NUMBER,
    prodid_ref     REF frod_obj,
    quantity       INT,
    itemprice      DECIMAL,
    wfusage_ntab   wfusage_nesttabtyp
);
/

CREATE TYPE odetails_nesttabtyp AS
    TABLE OF odetails_obj;
/

CREATE TYPE prod_obj AS OBJECT (
    prodoid          NUMBER,
    odate            DATE,
    promisedate      DATE,
    completiondate   DATE,
    shipmentdate     DATE,
    status           VARCHAR(20),
    odetails_ntab    odetails_nesttabtyp
);
/

CREATE TABLE prod_objtab OF prod_obj (
    PRIMARY KEY ( prodoid )
) OBJECT IDENTIFIER IS PRIMARY KEY
NESTED TABLE odetails_ntab STORE AS oprod_ntab ( (
    PRIMARY KEY ( nested_table_id,
                  mfid )
)
ORGANIZATION INDEX
COMPRESS ) RETURN AS LOCATOR
/

ALTER TABLE oprod_ntab ADD (
    SCOPE FOR ( prodid_ref ) IS frod_table
);
/

创建嵌套表时出现以下错误。

ORA-02320: 为嵌套表列创建存储表失败 odetails_ntab ORA-25175: 未找到 PRIMARY KEY 约束 02320. 00000 - “为嵌套表列 %s 创建存储表失败” *原因:创建存储表时出错 指定的嵌套表列。 *行动:有关更多详细信息,请参阅随后的消息。如果情况 他们描述的可以纠正,这样做;否则联系甲骨文 支持。

    INSERT INTO prod_objtab  VALUES ( 45000,
    '12-April-2019',
    '01-MAy-2019',
    '01-MAy-2019',
    '01-MAy-2019',
    'COMPLETED',
    odetails_nesttabtyp()
);
INSERT INTO TABLE (SELECT pr.odetails_ntab  FROM prod_objtab pr WHERE pr.prodorderid = 45000 ) 
                    values (45001,(SELECT REF(pt) FROM frod_table pt WHERE pt.prodid = 10001 ),100,500,
                    wfusage_nesttabtyp(wfusage_obj('12-April-2019',60,100,'AME',
                    (SELECT REF(wf) FROM wf_table wf WHERE wf.wfid = 240))));

在第 9 行得到错误 ORA-01401: 插入的值对于列来说太大

【问题讨论】:

    标签: oracle plsql oracle11g orm object-relational-model


    【解决方案1】:

    ORA-02320: 为嵌套表列创建存储表失败 odetails_ntab ORA-25175: 找不到 PRIMARY KEY 约束 02320. 00000 - “为嵌套表列 %s 创建存储表失败” *原因:为指定的嵌套表列创建存储表时出错。 *行动:查看下面的消息 更多细节。如果他们描述的情况可以得到纠正,请执行 所以;否则请联系 Oracle 支持。

    由于您已经完成了Multi-level 嵌套,因此在创建表时,您还需要Nested 表的2 层Storage。看看下面你是怎么做到的。

    CREATE TABLE prod_objtab OF prod_obj (
        PRIMARY KEY ( prodoid )
    ) OBJECT IDENTIFIER IS PRIMARY KEY 
    NESTED TABLE odetails_ntab STORE AS oprod_ntab ( ( PRIMARY KEY (NESTED_TABLE_ID, mfid )) 
    ORGANIZATION INDEX COMPRESS
    NESTED TABLE wfusage_ntab STORE AS  XX ) RETURN AS LOCATOR;
    

    阅读更多 https://docs.oracle.com/en/database/oracle/oracle-database/18/adobj/multilevel-collection-types.html#GUID-76D5A6B0-28AD-483D-942C-B7F3B90AC379

    【讨论】:

      猜你喜欢
      • 2018-10-21
      • 1970-01-01
      • 2020-11-12
      • 1970-01-01
      • 2012-11-20
      • 1970-01-01
      • 2016-02-27
      • 2021-05-29
      • 2020-11-29
      相关资源
      最近更新 更多