How to add more rows to object type column in oracle
To achieve that you need to use nested table. Here is an example:
create or replace type excep_type as object ( overridden_attribute varchar2 (30), exception_id number)/create or replace type t_excep_type as table of excep_type/create table nst_table( id number, exp t_excep_type) nested table exp store as nst_exp -- name of the nested table/-- inserting of record in the base tableSQL> insert into nst_table(id, exp) 2 values(1, t_excep_type(excep_type('X', 1)));1 row insertedSQL> commit;Commit complete SQL> select * from nst_table t, table(t.exp); ID EXP OVERRIDDEN_ATTRIBUTE EXCEPTION_ID --------------------------------------------- ------------ 1 <Ob X 1 -- inserting of record in the nested tableSQL> insert into table(select exp from nst_table where id = 1) 2 values (excep_type('Y', '2')) 3 ;1 row insertedSQL> commit;Commit complete-- unnesting.SQL> select * from nst_table t, table(t.exp); ID EXP OVERRIDDEN_ATTRIBUTE EXCEPTION_ID---------- --- ------------------------------ ------------ 1 <Ob X 1 1 <Ob Y 2 -- updating of data in the nested table SQL> update table(select exp from nst_table where id = 1) 2 set overridden_attribute = 'Z', exception_id = 3 3 where exception_id = 1 and overridden_attribute = 'X'; 1 row updated SQL> select * from nst_table t, table(t.exp); ID EXP OVERRIDDEN_ATTRIBUTE EXCEPTION_ID ---------- --- ------------------------------------------- 1 <Ob Z 3 1 <Ob Y 2
But that approach of storing data to implement master-detail relationship is not the best one.
try:
CREATE OR REPLACE TYPE excep_type AS OBJECT (overridden_attribute VARCHAR2 (30), exception_id NUMBER); CREATE OR REPLACE TYPE excep_type_List AS TABLE OF excep_type;CREATE TABLE obj_test (id NUMBER, obj_col excep_type_List)NESTED TABLE obj_col store as obj_col_tab; insert into obj_test(id, obj_col) values(1, excep_type_List(new excep_type('X',1),new excep_type('Y',2)));