循环依赖-表插入错误

时间:2018-09-17 09:35:04

标签: sql oracle nested-table

我想将数据插入表中,但是出现以下错误。.任何人都可以帮我..

CREATE OR REPLACE TYPE TEST_TYP FORCE IS OBJECT 
    ("id" VARCHAR(5000 NULL) 
NOT FINAL;

CREATE OR REPLACE TYPE TEST_TAB is table of REF TEST_TYP; 

CREATE OR REPLACE TYPE TEST1_TYP FORCE IS OBJECT 
    ("id" VARCHAR2(500) NULL,
     "extension" "TEST_TAB" NULL )
NOT FINAL;


CREATE TABLE "TEST_OBJ_TABLE" OF "TEST1_TYP"
NESTED TABLE "extension" STORE AS "Allin"

当我尝试使用此语句插入L

insert into "TEST_OBJ_TABLE" ("id","extension")
VALUES(
'0FE71A85',
"TEST_TAB"("TEST_TYP"( '0FE71A8'))
);

它抛出此错误

  

命令行错误:59列:12
  错误报告-
  SQL错误:ORA-00932:数据类型不一致:预期的REF SUB_HWOW.TEST_TYP得到了SUB_HWOW.TEST_TYP
  00932. 00000-“数据类型不一致:预期的%s得到了%s”
  *原因:
  *操作:

2 个答案:

答案 0 :(得分:0)

更改了原始答案。引号对您没有帮助-也不叫您的列名ID。删除了REF参考。

CREATE OR REPLACE TYPE TEST_TYP FORCE IS OBJECT 
    (id1 VARCHAR(4000) NULL)
NOT FINAL;

CREATE OR REPLACE TYPE TEST_TAB is table of TEST_TYP; 

CREATE OR REPLACE TYPE TEST1_TYP FORCE IS OBJECT 
    (id2 VARCHAR2(500) NULL,
     extension TEST_TAB NULL )
NOT FINAL;


CREATE TABLE TEST_OBJ_TABLE OF TEST1_TYP
NESTED TABLE extension STORE AS Allin ;

insert into TEST_OBJ_TABLE ( ID2, EXTENSION)
VALUES(
'0FE71A85',
TEST_TAB(TEST_TYP( '0FE71A8'))
);

SELECT * FROM TEST_OBJ_TABLE ;

答案 1 :(得分:0)

  1. 您必须修改对象TEST_TYP -> varchar2 has to be max 4000。 您必须将此对象存储在db中。
  2. 为TEST_TYP创建对象表 create table t_for_test_type of TEST_TYP;
  3. 要获取对象引用,必须将对象保存在db表中。就您而言:

    声明
          v_ref_to_test_type1 ref TEST_TYP;
        开始      插入t_for_test_type t值('abcd1')返回ref(t)到v_ref_to_test_type1;
        结束:

  4. 将所有部分结合在一起。

    声明   v_ref_to_test_type1 ref TEST_TYP;
      v_ref_to_test_type2 ref TEST_TYP;
    开始  插入t_for_test_type t值('abcd1')返回ref(t)到v_ref_to_test_type1;  插入t_for_test_type t值('abcd2')返回ref(t)到v_ref_to_test_type2;  插入到TEST_OBJ_TABLE值中(TEST1_TYP('abcd',new TEST_TAB(v_ref_to_test_type1,v_ref_to_test_type2))); 结束;

  5. 查询表。 select t."id",x.column_value from TEST_OBJ_TABLE t, table(t."extension") x会将id + ref返回给其他对象

  6. 查看引用的对象。 select t."id",deref(x.column_value) from TEST_OBJ_TABLE t, table(t."extension") x

注1。您应该避免使用双引号声明属性。 db区分大小写,这不是正常情况:)

注2。我不知道为什么今天无法使用代码格式

问题。您为什么要尝试使用这种复杂的结构?