1

I have an oracle nested table as follows:

create table test_tab
(
Col1        VARCHAR,
Col2        VARCHAR,
Col3        VARCHAR,
Col4       Coltype,
PK(col1,col2,col3)
 );

Coltype definition:

create type Coltype as varray(10) of Coltuple;

Coltuple definition:

create type remarktuple as object
(
ColX varchar,
Coly varchar,
Colz varchar
);

and i have inserted a single row

insert into test_tab values('A','B','C',Coltype(Coltuple('X','Y','Z'));

now, if i want to inserted Coltype(Coltupele('P','Q','R')) to the same A,B,C row, how can i do it??... When i use a separate insert like insert into test_tab values('A','B','C',Coltype(Coltuple('P','Q','R')); , it is assuming it as a second insert and throwing error because of PK voilation.

Hope i have explained my requirement clearly. Thank you in advance.

2 Answers 2

1

With the above definition, Col4 is not a nested table; it's a varray. For Col4 to be a nested table, first, Coltype should be defined as:

CREATE TYPE Coltype AS TABLE of Coltuple;

Then, test_tab should be defined as something like the below:

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;

Now, with (Col1,Col2,Col3) being defined as the primary key of the parent table, it is not possible to insert another row with the values of ('A','B','C') while such a row already exists in the table unless the primary key constraint of the parent table is relaxed. Much probably, you wanted to insert ('P','Q','R') into the nested table of the parent table's row where (Col1,Col2,Col3) was('A','B','C'). If that's the case, here is how it could be achieved:

INSERT INTO TABLE(SELECT Col4 FROM test_tab 
                  WHERE Col1 = 'A' AND Col2 = 'B' AND  Col3 = 'C')
VALUES('P','Q','R');
Sign up to request clarification or add additional context in comments.

1 Comment

Thank you ver much sir. Your solution has been fantastic
0

Another way to do it is this one:

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

Comments

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Start asking to get answers

Find the answer to your question by asking.

Ask question

Explore related questions

See similar questions with these tags.