パラメータとして2つのテーブル名を受け入れ、あるテーブルから別のテーブルに行を1つずつコピーするプロシージャを作成しようとしています。私は一括挿入を知っており、SELECT INTO
はこれを行う良い方法ですが、一度に複数の行を挿入すると、テーブルのトリガーが突然変異エラーを投げるため、一括挿入が機能しません。PLSQLカーソルを動的に定義する
私は動的SQLを使用することをお勧めする他の回答を見ましたが、カーソルをそのように定義する方法について固執しています。上記書き込まとしてコンパイルするときにハードコードされたテーブル名を使用してコンパイルする場合
CREATE OR REPLACE PROCEDURE TABLE_INSERT(
donor_t IN VARCHAR2,
empty_t IN VARCHAR2
)
AS
CURSOR C1 IS
SELECT * FROM donor_t;
BEGIN
FOR row IN C1
LOOP
INSERT INTO empty_t VALUES row;
END LOOP;
END;
、コンパイラはORA-00942: table or view does not exist.
をスロー予想されるように、この関数がエラーなしで、行を挿入します。
を基本的にあなたがやろうとしているものではなく、それをしない理由を選択すると、挿入、ありますか? 行単位でデータを処理すると、パフォーマンスが低下します。 –
トリガーを見て、一括操作で無効にして後で再び有効にできるかどうかを検討することをお勧めします。明らかに、一括操作では、トリガーによって実行されるビジネスロジックを処理する必要があります。それ以外の場合は、Oracleのドキュメント(例)を試してみてください。https://docs.oracle.com/cd/B28359_01/appdev.111/b28370/dynamic.htm#BHCGEFCA – BriteSponge
@BriteSponge挿入後にトリガして再度有効にします。そのソリューションは魅力的に機能しました。 – OnLinedPaper