選択クエリと挿入クエリが varchar として格納されているテーブルがあります。選択クエリを実行し、プロシージャを使用して挿入クエリを使用して選択クエリの結果を挿入する必要があります。現在、選択クエリをvarcharのテーブルに収集する即時および一括収集を実行しています。
この後、vartable の各行に移動し、値を取得して挿入クエリに入れます。いくつかのテーブルに対して、選択クエリと挿入クエリのペアがいくつかあります。したがって、これは動的に行う必要があります。私の質問は、選択クエリの結果を保存するより良い方法はありますか? varchar のテーブルを使用する以外に? 選択クエリの結果セットには数百万のレコードが含まれる可能性があり、これが問題を引き起こす可能性があるためです。ネストされたテーブル型を使用し、それにEXTENDを使用すると問題は解決しますか?
PROCEDURE SEL_INS
AS
CURSOR C
IS
SELECT
SELEQRY SELQRY,
INSQUERY INSERTQRY,
cols COLS
FROM TAB1;
selqry VARCHAR2(1000);
insqry VARCHAR2(1000);
tab1 vartable:=vartable();
cols NUMBER;
BEGIN
tab1:=vartable(NULL);
FOR X IN C
LOOP
selqry:= X.SELQRY;
cols:=X.COLS;
EXECUTE immediate selqry bulk collect INTO tab1;
-- select statement is concatenated before executing. so that each index has one record
--with values separated by commas
--- a sample column in tab1 will have values like (abc,abc1,abc2)
FOR i IN 1..tab1.count
LOOP
insqry :=X.INSERTQRY;
--- insert query will have values like insert into tab2 values('abc,'abc1','abc2')
EXECUTE immediate insqry;
END LOOP;
END LOOP;
END SEL_INS;
vartable は varchars2(4000) 型のテーブルです