web-dev-qa-db-ja.com

Oracleでのトリガー前後の違い

Oracle 10gの「前」トリガーと「後」トリガーの違いを例を挙げて説明できますか?

15
Jagan

まず、triggerを定義することから答えを始めます。atriggerは、行が追加、変更、または削除されたときに実行されるストアドプロシージャです。

トリガーは、アクションが実行される前に[〜#〜] [〜#〜]、または[〜#〜 ] after [〜#〜]アクションが実行されます。

BEFOREトリガーは通常、変更を受け入れる前に検証を行う必要がある場合に使用されます。これらは、データベースに変更が加えられる前に実行されます。銀行のデータベースを実行しているとしましょう。テーブルaccountsとテーブルtransactionsがあります。ユーザーが自分のアカウントから引き出しを行う場合は、ユーザーが自分のアカウントに引き出しに十分なクレジットを持っていることを確認する必要があります。 BEFOREトリガーはそれを可能にし、transactionsのバランスが十分でない場合に行がaccountsに挿入されるのを防ぎます。

AFTERトリガーは通常、変更のために別のテーブルで情報を更新する必要がある場合に使用されます。これらは、データベースに変更が加えられた後に実行されます(必ずしもコミットされている必要はありません)。後ろの例に戻りましょう。トランザクションが成功したら、balanceテーブルのaccountsを更新する必要があります。 AFTERトリガーを使用すると、まさにそれを実行できます。

30
Andrew Moore

あなたが何に興味を持っているのか完全にはわからないので、これを基本的に保ちます。

トリガーの前

  • 名前のとおり、これらのトリガーは、テーブルに行を作成する前に発生します。その後、行がまだ作成されていないため、:new.table_elementフィールドに完全にアクセスできます。これにより、不要な/不正な形式のデータを挿入/更新しようとした場合に、データのクレンジングと均一性が実現します。これは単なる基本的な例ですが、「:new」データへのアクセスが必要になる可能性がある場合はいつでも、beforeトリガーを利用する必要があります。

トリガー後

  • アフタートリガーは、行が既に作成されると起動するため、これらのトリガーは通常、行が原因でロジックを発生させたい場合に使用されます。たとえば、アドレステーブルがあり、ユーザーが自分のアドレスを更新する場合、作成時に外部参照テーブルのアドレス参照IDを更新することができます(古いアドレスもすべて保持している場合)。また、beforeトリガーとは異なり、行はすでにテーブルに存在するため、列の値を変更するためのアクセス権はありません。
7
imbroglio

BEFORE TRIGGERは、トリガーアクションがトリガーステートメントの完了を許可するかどうかを決定する必要がある場合に使用されます。BEFORETRIGGERSを使用すると、ユーザーはトリガーステートメントの不要な処理を排除できますが、AFTER TRIGGERSは、トリガーステートメントを実行する前に完了する必要がある場合に使用されます。アクションをトリガーします。

1
srimanta sahoo