我有一个oracle嵌套表,如下所示:
create table test_tab
(
Col1 VARCHAR,
Col2 VARCHAR,
Col3 VARCHAR,
Col4 Coltype,
PK(col1,col2,col3)
);
Coltype定义:
create type Coltype as varray(10) of Coltuple;
Coltuple定义:
create type remarktuple as object
(
ColX varchar,
Coly varchar,
Colz varchar
);
我插入了一行
insert into test_tab values('A','B','C',Coltype(Coltuple('X','Y','Z'));
现在,如果我想将Coltype(Coltupele('P','Q','R'))
插入到同一个A,B,C行,我该怎么办?...
当我使用像insert into test_tab values('A','B','C',Coltype(Coltuple('P','Q','R'));
这样的单独插入时,由于PK声音,它假定它是第二个插入并抛出错误。
希望我已清楚地解释了我的要求。提前谢谢。
答案 0 :(得分:1)
根据上面的定义,Col4
不是嵌套表;这是一种变形。要使Col4
成为嵌套表,首先,Coltype
应定义为:
CREATE TYPE Coltype AS TABLE of Coltuple;
然后,test_tab
应定义如下:
CREATE TABLE test_tab
(
Col1 VARCHAR2(30),
Col2 VARCHAR2(30),
Col3 VARCHAR2(30),
Col4 Coltype,
PRIMARY KEY (col1,col2,col3)
)
NESTED TABLE Col4 STORE AS ColtypeStoreTab;
现在,将(Col1,Col2,Col3)
定义为父表的主键,无法插入值为('A','B','C')
的另一行,而表中已存在此行,除非放宽父表的主键约束。 很可能,您希望将('P','Q','R')
插入到(Col1,Col2,Col3)
为('A','B','C')
的父表行的嵌套表中。如果是这种情况,可以通过以下方式实现:
INSERT INTO TABLE(SELECT Col4 FROM test_tab
WHERE Col1 = 'A' AND Col2 = 'B' AND Col3 = 'C')
VALUES('P','Q','R');
答案 1 :(得分:0)
另一种方法是:
UPDATE test_tab
SET Col4 = Col4 MULTISET UNION Coltype(Coltuple('P','Q','R'))
WHERE Col1 = 'A' AND Col2 = 'B' AND Col3 = 'C';