2013-12-19 61 views
1

我有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排除而抛出错误。

希望我明确解释了我的要求。先谢谢你。

回答

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'); 
+0

谢谢版本多先生。你的解决方案非常棒 –

0

另一种方式来做到这一点是这一个:

UPDATE test_tab 
SET Col4 = Col4 MULTISET UNION Coltype(Coltuple('P','Q','R')) 
WHERE Col1 = 'A' AND Col2 = 'B' AND Col3 = 'C';