我想将数据插入表中,但是出现以下错误。.任何人都可以帮我..
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”
*原因:
*操作:
答案 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)
TEST_TYP -> varchar2 has to be max 4000
。
您必须将此对象存储在db中。 create table t_for_test_type of TEST_TYP;
要获取对象引用,必须将对象保存在db表中。就您而言:
声明
v_ref_to_test_type1 ref TEST_TYP;
开始
插入t_for_test_type t值('abcd1')返回ref(t)到v_ref_to_test_type1;
结束:
将所有部分结合在一起。
声明
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)));
结束;
查询表。
select t."id",x.column_value from TEST_OBJ_TABLE t, table(t."extension") x
会将id + ref返回给其他对象
查看引用的对象。
select t."id",deref(x.column_value) from TEST_OBJ_TABLE t, table(t."extension") x
注1。您应该避免使用双引号声明属性。 db区分大小写,这不是正常情况:)
注2。我不知道为什么今天无法使用代码格式
问题。您为什么要尝试使用这种复杂的结构?