2016-11-07 32 views
0

テーブルの変更後にoracleトリガーを実行するコマンドがあります。 更新された行が100行ある場合でも、一度実行するにはこのコマンドが必要です。行が更新された場合のみ起動トリガー

FOR EACH ROW行が更新されたときにのみコマンドを送信できるようにするには、最初のループの後に実行を停止するにはどうすればよいですか?

+1

にあなたは文レベルのトリガを探しています: '各statement' –

+0

のために文レベルのトリガが一度解雇、それでもなし行場合されます更新されました...行が実際に更新された場合にのみ、私のコマンドを送信してください。 – Djoz

+1

次に、変更された行の数を数える複合トリガを使用します。http://docs.oracle.com/database/121/LNPLS /triggers.htm#CIHGJFAB –

答えて

0

グローバルパッケージ変数を使用します。

1)更新ステートメントトリガーの前にnullにリセットします。各行トリガーの中

2)保存値/ INCカウンタ

3)は、更新文トリガーの後に決勝でチェックしますとinlyあなたのロジックを発射一度にかかわらず、影響を受けた行

1

の数は、それはあなたがしているに見えますcompound triggerを使用します。 for each rowセクションでは、更新するrowid Sを収集する必要があるとafter statement実行全体更新

+0

複合トリガーが機能しました!しかし、私は何かを収集する必要はありません、少なくとも1つの行が変更され、一度リフレッシュコマンドを実行する必要があります。 – Djoz

+0

@DJozef実際の更新が起こっても同じ値に更新されない場合、 ':new <>:old'をトリガコードと比較して、変更された行の数を取得するように書きました。しかし、これがあなたのために十分なら、私はそれが助けてうれしいです。 – Kacper

関連する問題