forall
を使用してMY_TABLE
にレコードを挿入したいとします。しかし、のデータが挿入されたレコードの各テストの実行で変更し続けます!私はループカウンターと関係があると思いますが、わかりません。コードスニペットは次のとおりです。テーブルに正しくレコードを挿入し、pl/sqlでforallを挿入する方法
DECLARE
TYPE l_rec_type IS RECORD (
datakey SOURCE_TABLE.datakey%TYPE,
sourcekey SOURCE_TABLE.sourcekey%TYPE,
DESCRIPTION SOURCE_TABLE.DESCRIPTION%TYPE,
dimension_name SOURCE_TABLE.dimension_name%TYPE ,
data_type SOURCE_TABLE.data_type%TYPE
);
TYPE l_table_type IS TABLE OF l_rec_typeINDEX BY PLS_INTEGER;
l_table l_table_type;
l_cntr NUMBER;
BEGIN
FOR rec_dimname IN (SELECT dimension_name FROM dimension_table) LOOP
l_cntr1 := 1
FOR rec_source IN (SELECT * FROM source_table WHERE data_type IS NOT NULL) LOOP
l_table(l_ctr1).datakey := rec_source.datakey;
l_table(l_ctr1).sourcekey := rec_source.sourcekey;
l_table(l_ctr1).DESCRIPTION := rec_source.DESCRIPTION;
l_table(l_ctr1).dimension_name := rec_source.dimension_name;
l_table(l_ctr1).data_type := rec_source.data_type;
l_cntr1 := l_cntr1+1;
END LOOP
FORALL j IN l_table.FIRST..l_table.LAST
INSERT INTO my_table VALUES(l_table(j).datakey,
l_table(j).sourcekey,
l_table(j).DESCRIPTION,
l_table(j).dimension_name,
l_table(j).data_type,
1,
SYSDATE,
login_id
);
END LOOP;
END;
私は間違っていますか? forループを使用した通常の挿入では5000レコードが挿入されます。私が直面している別の問題は、forallを使ってWHEN DUP_VAL_ON_INDEXと他の例外を処理する方法です。野生のためのループは簡単です。しかし、私は高速挿入のためにFORALLを使用しなければなりません。助けてください!
おかげで...私はそれは私の問題を解決を願って。これをしようとします。.. – Arcs
はい 'l_table.delete'は...魔法のように助け – Arcs
グレートに感謝を働きました!喜んで助けてください:) –