2017-11-14 15 views
0

ステートメントレベルのトリガーの仕組みを完全に理解できません。各取引の権利ごとに1回実行されますか?私がこのAFTER INSERTトリガーを持っていて、それが内部で何をするのかは、それが条件を満たす場合に特定の1つの列を更新することです(列ステータスの場合はUPDATE table_name SET STATUS = "Single" WHERE COLUMN is null)。Oracleのステートメントレベルのトリガー

新しく挿入されたデータだけが影響を受けますか?または、列ステータスにこのNULL値を持つ表のすべてのデータ。私はこれについてあなたの知識を聞いてうれしい。

+2

"*トランザクションごとに1回実行します*" - ** no **。名前のとおり、**ステートメント**ごとに1回実行されます。 –

答えて

0

影響を受ける各行に対して起動する行レベル・トリガーとは異なり、トリガー文が実行された後に文レベル・トリガーが1回起動します。

一般に、文のトリガはデータセットの処理を行うために使用されます。表へのログイン、または文後の処理(通常はプロシージャ)を実行しています。

影響を受けるすべての行の値を更新する場合は、前の行レベルのトリガーを使用することをお勧めします。あなたの質問の更新ステートメントは、COLUMN列がnullのすべての行に影響します。

トリガーが実際に使用するのが正しいかどうかは議論の余地があります。ただし、トリガーの仕組みや使用方法を理解するには、the documentationthis Oracle-base articleをお勧めします。

+0

はい、そうです。私はテストして、この特定の列のすべてのデータに影響を与えることを確認しました。あなたの助言として、テーブルが突然変異している、トリガー/機能がそれを見ることができないというエラーが発生しました。 – Zerosero

+0

これは、あなたが何をしようとしているかによってまったく異なります。既にその列に設定されている値を持つデータを挿入する必要があります(各行の挿入前)。私はあなたに入力と期待される出力データを含む新しい質問を投稿し、それが何をしようとしているのかを記述するようお勧めします。そうすれば、私たちはあなたを助けることができます。 – Boneist