平成30年午後1問2 設問2(2)トリガーの実行

リベンジしたいさん  
(No.1)
タイトルの設問ですが
トリガーの実施タイミングは解答だと削除の後になってます。
こちらは削除の前ではダメなのでしょうか?
そもそもトリガーのbeforeとafterのタイミングの違い、使い分けを理解できてないので
教えていただけると幸いです。
2023.09.29 14:23
daizさん 
(No.2)
beforeトリガーでは、テーブルに対する変更操作を行うことはできない、とあります。
2023.09.29 15:18
ピノッキさん 
(No.3)
daizさん仰る通り、beforeトリガーではinsert処理が不可と、問題にありますね
この制約なければ前でも問題ないかと思います。
----
トリガーとは契機ともいわれます。
ピストルなど銃にもありますよね、トリガー。

要はそのイベントが発火すると、それをきっかけに処理を動かしますよ、ということです。

トリガーに定義したイベントをきっかけに処理を動かすのはbeforeでもafterでも同じで
トリガーの契機の前に動かすか後に動かすかの違いです。

わかりやすく説明するの難しいなあ~
2023.09.29 15:57
ピノッキさん 
(No.4)
ピストルに例えれば
引き金を引き切る前(直前)に発射するか、引き切った後に発射するか、みたいな?

引き金を引くことがトリガー。
2023.09.29 15:59
GinSanaさん 
DB シルバーマイスター
(No.5)
BEFOREトリガでINSERTが指定できないのは、この問題に限らず、ANSI SQLの仕様が指定を許していないので、もしどこかのDBMSで許可されていたら、拡張仕様です。

crate/SQL-99 Complete, Really
Chapter 24 -- SQL Trigger

If Trigger action time is BEFORE, the Trigger action may include these SQL statements: DECLARE TABLE, DECLARE CURSOR, OPEN, CLOSE, FETCH, SELECT (for a single row only), FREE LOCATOR, HOLD
LOCATOR, CALL, RETURN and GET DIAGNOSTICS. (...)
If Trigger action time is AFTER, the Trigger action may include all of the SQL statements allowed for BEFORE Triggers, plus: INSERT, UPDATE and DELETE.(...)

BEFOREトリガーの場合、アクションには次の SQL ステートメントが含まれる可能性がある。
DECLARE TABLE、DECLARE CURSOR、OPEN、CLOSE、FETCH、SELECT (単一行のみ)、FREE LOCATOR、HOLD LOCATOR、CALL、RETURN、GET DIAGNOSTICS
(・・・)
AFTERトリガーの場合、アクションにはBEFORE トリガーに許可されているすべての SQL ステートメントに加えて、INSERT、UPDATE、および DELETE が含まれる場合がある。
2023.09.29 16:34

返信投稿用フォーム

スパム防止のためにスレッド作成日から30日経過したスレッドへの書込みはできません。

その他のスレッド


Pagetop