3
私はいくつかの助けが必要です。 私は、挿入、削除、または更新操作が特定のテーブルで実行されるたびに、プロシージャを実行するトリガを作成しようとしています。 はこれがどのコミットする前にトリガが起動するので、トリガーSql Oracle 12cトリガー
CREATE OR REPLACE NONEDITIONABLE TRIGGER NQDI.GAV_TRG
AFTER INSERT or UPDATE or DELETE ON D_GAV
FOR EACH ROW
BEGIN
PRC_FILL_D_GAV(:old.report_name);
END;
Unofortunatelyが、行われていると私は同じテーブルから読み取る必要があり、それは私を与えている「D_GAVテーブルが変更されて読み取ることができません」エラー。 さらに、for EACH ROWは、すべてのレコードのトリガー開始を変更しますが、すべての更新、挿入または削除がコミットされたときにトリガーを開始するだけですが、これを実行しながら:old.report_nameを保存します。 私は「実行中のプロセス」で私が望むことができることを知っていますが、私はそれを避けたいと思います。私が見落としている他の解決策はありますか?
'FOR EACH ROW'節を削除するだけで、1レコードにつき1回ではなく、1文ごとに1回起動します。しかし、この場合、あなたは ':old.report_name'へのアクセス権がありません。 –
はい、私はそれについて考えましたが、その変数を絶対に必要としている間に、エラー" 'テーブルレベルのトリガーでは許可されていないNEWまたはOLD参照' 'を与えます。 –
トリガーをトランザクション(COMMIT)から分離することはできません。すべての手順を実行し、必要な操作をすべて実行します。 –