2013-12-19 63 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';