ネストされたテーブルとして列の 1 つを持つテーブルがあります。
このテーブルのデータを別のテーブルにコピーしたい。これに対して INSERT 句をどのように構成するかは難しいようです。
検討。ネストされたテーブルであるフィールドは、型が「typ_phone_extn」のテーブルであるユーザー定義型「TBL_PHONE_EXTN」である phone_list です。
CREATE OR REPLACE TYPE typ_phone_extn AS OBJECT
(phone_number VARCHAR2 (20), extension VARCHAR2 (10));
/
CREATE OR REPLACE TYPE tbl_phone_extn AS TABLE OF typ_phone_extn;
/
以下は明らかに失敗します: (ORA-00904: : 無効な識別子)
INSERT INTO sch2.sub_pat_address (
pat_address_id,
pat_id,
**phone_list,**
last_updated_by
)
SELECT pat_address_id,
pat_id,
**phone_list,**
last_updated_by
FROM sch1.sub_pat_address ;
だから私は試します:
SELECT pat_address_id,
pat_id,
**tbl_phone_extn(typ_phone_extn (phone_number,extension)),**
last_updated_by
FROM sch1.sub_pat_address, **table(phone_list)** ;
これが行うことは、ネストされたテーブルのネストを解除することです。つまり、特定の pat_address_id に 5 つの phone,extn の組み合わせの phone_list があった場合、これにより、挿入できない、また挿入すべきではない 5 つのレコードが得られます。
問題は、ネスト (ネストされたテーブルの列) をそのまま維持し、新しいテーブルに挿入する方法です。まあ、CTAS は 1 つのオプションかもしれませんが、それには INSERT の代わりにまったく新しいテーブルが必要です。どんな助けでも大歓迎です。