自律storedFunction
型トランザクションとして機能し、1 億行を超える行を処理しているとすれば、パフォーマンスに深刻な問題が発生する可能性があります。可能であれば、この戦略全体を再考します。それをスクラップします。最初からやり直してください。
オプション1
bulk collect
これが不可能な場合は、フェッチを (制限付きで) 実行して and を取得col1
し、各行の を明示的にcol2
呼び出してからに入れるのが最善の策です。これにより、 からの読み取りおよび への書き込みの I/O が最小限に抑えられるはずです。あなたは本当に電話でパイパーを支払うつもりです。storedFunction
col2
bulk insert
table1
table2
table1
storedFunction
オプション 2
必要な動作を持つ別の関数内に関数をラップします。タイプについては言及していませんが、VARCHAR2を想定しています。もちろん、必要に応じて調整できます。Oracle データベースが手元にないため、構文エラーをお許しください。
CREATE FUNCTION MYFUNC(col1 IN VARCHAR2, col2 IN VARCHAR2) RETURN VARCHAR2
AS
v_dummy VARCHAR2(100);
BEGIN
v_dummy := storedFunction(col2); --Call stored function
return col1; --return col 1 unchanged
END;
次に、次のように挿入を実行できます。
INSERT INTO table1 (col1)
SELECT MYFUNC(A.col1, A.col2)
FROM table2 A;