1

ネストされたテーブル列を含むテーブルを作成する方法と、手順 1 ~ 5 で説明したようにそれらを「手動で」更新する方法を示す多くの例を見つけました。

私がしたいこと: ネストされたテーブルの列 (例では「cust_info」) を、データベース内の他のテーブル (同じ構造を持つ NEW_TBL-) から直接/自動的に更新し、値を次々に手動で入力しないようにします。

(1) オブジェクトの作成:

CREATE TYPE TEST_OBJECT_T AS OBJECT
(
x   NUMBER,
y   NUMBER 
);

(2) コレクションの作成:

CREATE  TYPE TEST_OBJ_TBL IS TABLE OF TEST_OBJECT_T;

(3) 表の列をネストした表の作成

create table aaaTable
 (
 CUSTID number,
 cust_info TEST_OBJ_TBL
 )
 NESTED TABLE cust_info STORE AS xx_tbl
 ;

(4) -- データを挿入

insert into AAATABLE  
 VALUES (1,TEST_OBJ_TBL(
                             TEST_OBJECT_T(33,77),
                             TEST_OBJECT_T(66,67),
                             TEST_OBJECT_T(320,999)
                            )
        );

++++++++++++++++++++++++++++++++++++++++++++++++++++ +++++

insert into AAATABLE  
 VALUES (2,TEST_OBJ_TBL(
                             TEST_OBJECT_T(444,555),
                             TEST_OBJECT_T(333,67),
                             TEST_OBJECT_T(111,978)
                            )
        );

(5) クエリ 2 結果を見る

 select T1.custid ,T2.*
  from AAATABLE T1 , table(T1. CUST_INFO) T2;

results :
CUSTID          X          Y
---------- ---------- ----------
         1         33         77 
         1         66         67 
         1        320        999 
         2        444        555 
         2        333         67 
         2        111        978

(6) ネストした表の列を更新するためのデータソースとなる新しい表を作成します)

create table new_tbl
(
X1  NUMBER,
Y1  NUMBER 
);

(7) 新しいテーブルにデータを挿入する

insert into NEW_TBL values (222,444);
insert into NEW_TBL values (345,777);
insert into NEW_TBL values (867,222);

+++++++++++++++++++++++++++++++++++

select * from NEW_TBL


   X 1         Y1
---------- ----------
       222        444 
       345        777 
       867        222 

再度の質問: 「new_tbl」データをネストされたテーブル列 (「cust_info」) に一括で挿入できますか (つまり、ステージ 4 でデータを置き換えます TEST_OBJECT_T(33,77), TEST_OBJECT_T(66,67), TEST_OBJECT_T(320,999) )一括収集を使用しようとしましたが、成功しませんでした。

ありがとうケレン

4

1 に答える 1