4
CREATE OR REPLACE TYPE excep_type
AS
   OBJECT (overridden_attribute VARCHAR2 (30), exception_id NUMBER);

CREATE TABLE obj_test (id     NUMBER, obj_col excep_type);


INSERT INTO obj_test
  VALUES   (1, excep_type ('x', 1));

 SELECT   * FROM obj_test;

 ID   OBJ_COL
 --------------
 1     (X,1)

これは私にとっては問題ありませんが、このオブジェクト型列 obj_col にさらにレコードを追加したいとします。次に、何をする必要がありますか。

ID 1 の列 obj_col に挿入する必要があるレコード Y,2 がもう 1 つあるとします。次に、どのステートメントを実行する必要があるかを考えます。 期待される出力

ID   OBJ_COL
--------------
1     (X,1)
      (Y,2)

X、1がZ、3から更新されたように既存のものを更新したい場合、何をする必要がありますか。期待される出力

ID   OBJ_COL
--------------
1     (Z,3)

これで私を助けてください

4

2 に答える 2

2

それを達成するには、ネストされたテーブルを使用する必要があります。次に例を示します。

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 table

SQL> insert into nst_table(id, exp)
  2    values(1, t_excep_type(excep_type('X', 1)));

1 row inserted

SQL> 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 table

SQL> insert into table(select exp from nst_table where id = 1)
  2    values (excep_type('Y', '2'))
  3  ;

1 row inserted

SQL> 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

しかし、マスターと詳細の関係を実装するためにデータを保存するというアプローチは、最善の方法ではありません。

于 2012-10-22T10:20:28.903 に答える
1

試す:

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)
));
于 2012-10-22T10:12:12.130 に答える