CREATE TRIGGER æ–‡

トリガã?«ã‚ˆã‚Šãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã?®ã‚¤ãƒ™ãƒ³ãƒˆã?«å¿œã?˜ã?¦å®Ÿè¡Œã?•れるアクションã?®é›†å?ˆã‚’ã€?表ã?«å®šç¾©ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚ã?“ã?“ã?§ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã?®ã‚¤ãƒ™ãƒ³ãƒˆã?¨ã?¯å‰Šé™¤ã€?挿入ã€?更新処ç?†ã?®ã?“ã?¨ã?§ã?™ã€‚ 例ã?ˆã?°è¡¨ã?«å‰Šé™¤ã?¸ã?®ãƒˆãƒªã‚¬ã‚’定義ã?—ã?Ÿå ´å?ˆã€?ã??ã?®ãƒˆãƒªã‚¬ã?®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã?¯è¡¨ã?‹ã‚‰è¡Œã?Œå‰Šé™¤ã?•れるã?¨ã??ã?«å®Ÿè¡Œã?•れã?¾ã?™ã€‚

制約ã?¨ä½µã?›ã?¦ã€?トリガã?«ã‚ˆã‚‹æ³¢å?Šçš„ã?ªå‰Šé™¤ã‚„更新を定義ã?™ã‚‹ã?“ã?¨ã?§ã€?情報ã?®æ•´å?ˆæ€§ã‚’ä¿?ã?¤ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚ トリガã?§å®Ÿç?¾ã?§ã??る機能ã?¯ã?“ã?®ã?»ã?‹ã?«ã‚‚ã€?警告ã?®å‘ˆç¤ºã‚„ã€?ä»–ã?®è¡¨ã?®æ›´æ–°ã€?e-mailã?®é€?ä¿¡ã‚„ã??ã?®ä»–ã?®å‡¦ç?†ã?ªã?©ã€?多å²?ã?«ã‚?ã?Ÿã‚Šã?¾ã?™ã€‚

ã?²ã?¨ã?¤ã?®è¡¨ã?«å®šç¾©å?¯èƒ½ã?ªãƒˆãƒªã‚¬ã?®æ•°ã?«ã?¯ã€?ã??れらã?®ãƒˆãƒªã‚¬ã?Œå?Œã?˜ã‚¤ãƒ™ãƒ³ãƒˆã?¸ã?®ãƒˆãƒªã‚¬ã?§ã?‚ã‚‹ã?‹å?¦ã?‹ã?«ã?‹ã?‹ã‚?らã?šã€?上é™?ã?¯ã?‚りã?¾ã?›ã‚“。

スキーマã?®æ‰€æœ‰è€…ã?§ã?‚るユーザã?§ã?‚れã?°ã€?ã??ã?®ã‚¹ã‚­ãƒ¼ãƒžã?«ãƒˆãƒªã‚¬ã‚’作æˆ?ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚ 所有ã?—ã?¦ã?„ã?ªã?„表ã?«ãƒˆãƒªã‚¬ã‚’定義ã?™ã‚‹ã?Ÿã‚?ã?«ã?¯ã€?ã??ã?®è¡¨ã?«TRIGGER権é™?ã‚’æŒ?ã?£ã?¦ã?„ã?ªã?‘れã?°ã?ªã‚Šã?¾ã?›ã‚“。 データベースã?®æ‰€æœ‰è€…ã?§ã?‚るユーザã?§ã?‚れã?°ã€?ã?©ã?®ã‚¹ã‚­ãƒ¼ãƒžã?®ã?©ã?®è¡¨ã?«å¯¾ã?—ã?¦ã‚‚トリガを作æˆ?ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚

トリガ�トリガ�定義�れ��る表��異�るスキーマ�定義�る��も�能��。

é™?定ã?•れã?Ÿãƒˆãƒªã‚¬å??ã?®ã‚¹ã‚­ãƒ¼ãƒžå??ã?¯ã€?SYSã?§å§‹ã?¾ã?£ã?¦ã?¯ã?ªã‚Šã?¾ã?›ã‚“。

æ§‹æ–‡

CREATE TRIGGER トリガå??
{ AFTER | NO CASCADE BEFORE } 
{ INSERT | DELETE | UPDATE [ OF 列å?? [, 列å??]* ] }
ON 表å??
[ �照節 ]
[ FOR EACH { ROW | STATEMENT } ] [ MODE DB2SQL ] 
トリガ�れるSQL文

トリガ�発����後�

トリガã?¯å‰?ã?®ãƒˆãƒªã‚¬ã?‚ã‚‹ã?„ã?¯å¾Œã?®ãƒˆãƒªã‚¬ã?®ã?„ã?šã‚Œã?‹ã?¨ã?—ã?¦å®šç¾©ã?§ã??ã?¾ã?™ã€‚
  • å‰?ã?®ãƒˆãƒªã‚¬ã?¯æ–‡ã?«ã‚ˆã‚‹å¤‰æ›´ã?Œé?©ç”¨ã?•れ制約ã?«ã‚ˆã‚‹æ¤œè¨¼ã?Œè¡Œã‚?れるå‰?ã?«ç™ºç?«ã?—ã?¾ã?™ã€‚ å‰?ã?®ãƒˆãƒªã‚¬ã?¯ã€?行ã?®ãƒˆãƒªã‚¬ã?‚ã‚‹ã?„ã?¯æ–‡ã?®ãƒˆãƒªã‚¬ã?®ã?„ã?šã‚Œã?«ã‚‚ã?ªã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚(詳細ã?¯æ–‡ã?®ãƒˆãƒªã‚¬ã?¨è¡Œã?®ãƒˆãƒªã‚¬ã‚’å?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。)
  • 後ã?®ãƒˆãƒªã‚¬ã?¯å¤‰æ›´ã?Œé?©ç”¨ã?•れ制約ã?«ã‚ˆã‚‹æ¤œè¨¼ã?Œæº€ã?Ÿã?•れã?Ÿå¾Œã?«ç™ºç?«ã?—ã?¾ã?™ã€‚ 後ã?®ãƒˆãƒªã‚¬ã?¯ã€?行ã?®ãƒˆãƒªã‚¬ã?‚ã‚‹ã?„ã?¯æ–‡ã?®ãƒˆãƒªã‚¬ã?®ã?„ã?šã‚Œã?«ã‚‚ã?ªã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚(詳細ã?¯æ–‡ã?®ãƒˆãƒªã‚¬ã?¨è¡Œã?®ãƒˆãƒªã‚¬ã‚’å?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。)

挿入�削除�更新���れ�よりトリガ�発��れる��

トリガã?¯ã?©ã?®ã‚ˆã?†ã?«å®šç¾©ã?•れã?Ÿã?‹ã?«å¾“ã?£ã?¦ã€?次ã?®ã?„ã?šã‚Œã?‹ã?®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã?®ã‚¤ãƒ™ãƒ³ãƒˆã?«ã‚ˆã‚Šç™ºç?«ã?—ã?¾ã?™ã€‚(上記ã?®æ§‹æ–‡ã‚’å?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。
  • INSERT
  • UPDATE
  • DELETE

表ã?®ã‚¤ãƒ™ãƒ³ãƒˆã?”ã?¨ã?«å®šç¾©ã?§ã??るトリガã?®æ•°ã?«ä¸Šé™?ã?¯ã?‚りã?¾ã?›ã‚“。ã?•らã?«æ›´æ–°ã?¸ã?®ãƒˆãƒªã‚¬ã?§ã?‚れã?°ã€?対象ã?¨ã?ªã‚‹åˆ—を明示ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚

��値を�照�る���新��値を�照�る��:�照節

発ç?«ã?®åŽŸå› ã?¨ã?ªã?£ã?Ÿã‚¤ãƒ™ãƒ³ãƒˆã?§ç?¾åœ¨å¤‰æ›´ã?•れã?Ÿæƒ…報をトリガã?•れるSQLæ–‡ã?‹ã‚‰å?‚ç…§ã?™ã‚‹ã?“ã?¨ã?¯è‰¯ã??ã?‚ã‚‹ã?“ã?¨ã?§ã?™ã€‚ ã?¾ã?Ÿã€?トリガã?•れるSQLæ–‡ã?Œå?‚ç…§ã?—ã?ªã?‘れã?°ã?ªã‚‰ã?ªã?„ã?®ã?¯æ–°ã?—ã?„値(変更後ã€?後ã?®å€¤ã€?ã?¨è¨€ã?†ã?“ã?¨ã‚‚ã?§ã??ã?¾ã?™)ã?§ã?‚ã‚‹å ´å?ˆã?Œã?‚りã?¾ã?™ã€‚

Derbyã?«ã?¦ã€?発ç?«ã?—ã?ŸåŽŸå› ã?¨ã?ªã?£ã?Ÿã‚¤ãƒ™ãƒ³ãƒˆã?«ã‚ˆã‚Šå¤‰æ›´ã?•れã?Ÿæƒ…報をトリガã?‹ã‚‰å?‚ç…§ã?™ã‚‹æ–¹æ³•ã?¯ã?²ã?¨ã?¤ã? ã?‘ã?§ã?¯ã?‚りã?¾ã?›ã‚“。変更ã?•れã?Ÿæƒ…å ±ã?¯ãƒˆãƒªã‚¬ã?•れるSQLæ–‡ã?‹ã‚‰ã€?é?·ç§»å¤‰æ•°ã?‚ã‚‹ã?„ã?¯é?·ç§»è¡¨ã?§å?‚ç…§ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚ å?‚照節ã?«ã?¦é?·ç§»å¤‰æ•°ã?¸ã?®ç›¸é–¢å??や別å??ã‚’ã€?OLD/NEW AS 相関å??ã?¨ã?„ã?†æ›¸å¼?ã?§è¨˜è¿°ã?§ã??ã?¾ã?™ã€‚

例���次�よ��節をトリガ�定義�記述��場�。
REFERENCING OLD AS DELETEDROW
トリガã?•れるSQLæ–‡ã?§ã?“ã?®ç›¸é–¢å??ã‚’å?‚ç…§ã?§ã??ã?¾ã?™ã€‚
DELETE FROM HotelAvailability WHERE hotel_id = DELETEDROW.hotel_id
�移変数�OLD�NEW���れ��関�ら���一�行を��java.sql.ResultSet�マップ�れ��。
Note: é?·ç§»å¤‰æ•°ã‚’使ã?ˆã‚‹ã?®ã?¯ã€?行ã?®ãƒˆãƒªã‚¬ã? ã?‘ã?§ã?™ã€‚(æ–‡ã?®ãƒˆãƒªã‚¬ã?¨è¡Œã?®ãƒˆãƒªã‚¬ã‚’å?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。) ã?¾ã?Ÿã€?挿入イベントã?®è¡Œã?®ãƒˆãƒªã‚¬ã?§ã?¯OLDã?®è¡Œã‚’å?‚ç…§ã?§ã??ã?¾ã?›ã‚“。削除イベントã?®è¡Œã?®ãƒˆãƒªã‚¬ã?§ã?¯NEWã?®è¡Œã‚’å?‚ç…§ã?§ã??ã?¾ã?›ã‚“。

æ–‡ã?®ãƒˆãƒªã‚¬ã?§ã?¯ã€?é?·ç§»è¡¨ã‚’トリガã?•れるSQL文やトリガã?®è³‡æ ¼ã?§å?‚ç…§å?¯èƒ½ã?§ã?™ã€‚ å?‚照節ã?«ã?¦å?‚照表ã?¸ã?®ç›¸é–¢å??や別å??ã‚’ã€?OLD_TABLE/NEW_TABLE AS 相関å??ã?¨ã?„ã?†æ›¸å¼?ã?§è¨˜è¿°ã?§ã??ã?¾ã?™ã€‚

例���
REFERENCING OLD_TABLE AS DeletedHotels
ã?¨æ›¸ã??ã?“ã?¨ã?§è­˜åˆ¥å­?(DeletedHotels)をトリガã?•れるSQLæ–‡ã?§ä½¿ã?†ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚
DELETE FROM HotelAvailability WHERE hotel_id IN
    (SELECT hotel_id FROM DeletedHotels)
�移表����新����関�ら��トリガ�����原因�イベント�影響を���行�数���基数をも�java.sql.ResultSet�マップ�れ��。
Note: æ–‡ã?®ãƒˆãƒªã‚¬(æ–‡ã?®ãƒˆãƒªã‚¬ã?¨è¡Œã?®ãƒˆãƒªã‚¬ã‚’å?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。)ã?§ã?®ã?¿é?·ç§»è¡¨ã?¯åˆ©ç”¨å?¯èƒ½ã?§ã?™ã€‚ INSERTæ–‡ã?¸ã?®ãƒˆãƒªã‚¬ã?§ã?¯ã€?OLDã?®è¡¨ã?¯å?‚ç…§ã?§ã??ã?¾ã?›ã‚“。DELETEæ–‡ã?¸ã?®ãƒˆãƒªã‚¬ã?§ã?¯ã€?NEWã?®è¡¨ã?¯å?‚ç…§ã?§ã??ã?¾ã?›ã‚“。

å?‚照節ã?§ã?¯ã€?æ–°ã?—ã?„ã‚‚ã?®ã?¨å?¤ã?„ã‚‚ã?®ã?«ã??れã?žã‚Œä¸€ã?¤ã?¾ã?§ã€?相関å??ã?‚ã‚‹ã?„ã?¯è­˜åˆ¥å­?を定義ã?§ã??ã?¾ã?™ã€‚ ã?¾ã?Ÿã€?行ã?®ãƒˆãƒªã‚¬ã?«ã?¯é?·ç§»è¡¨ã?®è­˜åˆ¥å­?を定義ã?§ã??ã?ªã?„一方ã?§ã€?æ–‡ã?®ãƒˆãƒªã‚¬ã?«ã?¯é?·ç§»å¤‰æ•°ã?®ç›¸é–¢å??を定義ã?§ã??ã?¾ã?›ã‚“。

文�トリガ�行�トリガ

トリガ���文�トリガ�行�トリガ��り��。 CREATE TRIGGER文�FOR EACH節�����ら�トリガ��る�明示�れ����場��既定��文�トリガ��。
  • æ–‡ã?®ãƒˆãƒªã‚¬

    文�トリガ�トリガ�イベント毎�一回発����。トリガ�発��挿入・更新・削除��何行�変更�れ���関係�り��ん。

  • 行ã?®ãƒˆãƒªã‚¬

    行�トリガ�トリガ�イベント�影響�る行毎�一回発����。影響�一行�も������場��トリガ�発����ん。

Note: 列ã?®å€¤ã‚’å…ƒã?®å€¤ã?¨ç­‰ã?—ã?„値ã?«å¤‰æ›´ã?—ã?Ÿå ´å?ˆ(例ã?ˆã?°ã€?UPDATE T SET C = Cã?¨ã?„ã?†æ–‡ã‚’考ã?ˆã?¦ã??ã? ã?•ã?„。)ã€?トリガã?®ã‚¤ãƒ™ãƒ³ãƒˆå‰?ã?¨å¾Œã?§åˆ—ã?®å€¤ã?«å¤‰åŒ–ã?Œç„¡ã??ã?¦ã‚‚ã€?行ã?®ãƒˆãƒªã‚¬ã?¯ç™ºç?«ã?—ã?¾ã?™ã€‚

トリガ�れるSQL文

トリガã?§å®šç¾©ã?•れるアクションã?®ã?“ã?¨ã‚’ã€?トリガã?•れるSQLæ–‡ã?¨å‘¼ã?³ã?¾ã?™ã€‚(上記ã€?æ§‹æ–‡ã?®æœ€çµ‚行ををå?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。) トリガã?•れるSQLæ–‡ã?«ã?¯ä»¥ä¸‹ã?®åˆ¶é™?ã?Œã?‚りã?¾ã?™ã€‚
  • å‹•çš„ã?ªå¼•æ•°(?)ã?Œã?‚ã?£ã?¦ã?¯ã?ªã‚Šã?¾ã?›ã‚“。
  • トリガã?Œå®šç¾©ã?•れã?¦ã?„る表ã?®ä½œæˆ?ã‚„ã€?変更ã€?破棄を行ã?£ã?¦ã?¯ã?ªã‚Šã?¾ã?›ã‚“。
  • トリガã?Œå®šç¾©ã?•れã?¦ã?„る表ã?¸ã?®ç´¢å¼•ã?®ä½œæˆ?や破棄を行ã?£ã?¦ã?¯ã?ªã‚Šã?¾ã?›ã‚“。
  • トリガã?Œå®šç¾©ã?•れã?¦ã?„る表ã?¸ã?®ãƒˆãƒªã‚¬ã?®ä½œæˆ?や破棄を行ã?£ã?¦ã?¯ã?ªã‚Šã?¾ã?›ã‚“。
  • トランザクションã?®ã‚³ãƒŸãƒƒãƒˆã‚„ロールãƒ?ックã€?分離レベルã?®å¤‰æ›´ã‚’行ã?£ã?¦ã?¯ã?ªã‚Šã?¾ã?›ã‚“。
  • å‰?ã?®ãƒˆãƒªã‚¬ã?®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã?«INSERT/UPDATE/DELETEæ–‡ã?Œã?‚ã?£ã?¦ã?¯ã?ªã‚Šã?¾ã?›ã‚“。
  • å‰?ã?®ãƒˆãƒªã‚¬ã?®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã?§æ›´æ–°ã‚’行ã?†æ‰‹ç¶šã??を呼ã?³å‡ºã?—ã?¦ã?¯ã?ªã‚Šã?¾ã?›ã‚“。

トリガã?•れるSQLæ–‡ã?§ã?¯ãƒˆãƒªã‚¬ã?Œå®šç¾©ã?•れã?Ÿè¡¨ä»¥å¤–ã?®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã?®æƒ…報をå?‚ç…§ã?™ã‚‹ã?“ã?¨ã?Œã?§ã??ã?¾ã?™ã€‚ã??れらã?®ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã?®æƒ…å ±ã?Œç ´æ£„ã?•れã?¦ã?„ã?Ÿå ´å?ˆã€?トリガã?¯ç„¡åйã?¨ã?ªã‚Šã?¾ã?™ã€‚ 次回ã?®å®Ÿè¡Œã?«ã?¦ãƒˆãƒªã‚¬ã?®å†?コンパイルã?Œå¤±æ•—ã?—ã?Ÿå ´å?ˆã€?呼ã?³å‡ºã?—ã?¯ä¾‹å¤–を投ã?’ã?¦ã€?トリガを発ç?«ã?•ã?›ã?Ÿæ–‡ã?¯ãƒ­ãƒ¼ãƒ«ãƒ?ックã?•れã?¾ã?™ã€‚

トリガã?•れるSQLæ–‡ã?®è©³ç´°ã?«ã?¤ã?„ã?¦ã?¯ã€?Derby ディベロッパーズ ガイドをå?‚ç…§ã?—ã?¦ã??ã? ã?•ã?„。

実行�順�

トリガを発ç?«ã?•ã?›ã‚‹ãƒ‡ãƒ¼ã‚¿ãƒ™ãƒ¼ã‚¹ã?®ã‚¤ãƒ™ãƒ³ãƒˆã?Œèµ·ã??ã‚‹ã?¨ã€?Derbyã?¯å‡¦ç?†ã‚’次ã?®é †ã?§è¡Œã?„ã?¾ã?™ã€‚
  • 最åˆ?ã?«No Cascade Beforeã?ªãƒˆãƒªã‚¬ã?®ã‚¢ã‚¯ã‚·ãƒ§ãƒ³ã‚’実行ã?—ã?¾ã?™ã€‚
  • 次ã?«ã€?制約(主キーã€?一æ„?キーã€?外部キー)ã?®æ¤œè¨¼ã‚’行ã?„ã?¾ã?™ã€‚
  • ç¶šã?„ã?¦ã€?æ›´æ–°ã€?変更ã€?削除ã?ªã?©ã?®å‡¦ç?†ã‚’行ã?„ã?¾ã?™ã€‚
  • 最後ã?«Afterã?ªãƒˆãƒªã‚¬ã‚’発ç?«ã?—ã?¾ã?™ã€‚

��表�対�����イベント��発��る時(トリガ���後�����味��。)���トリガ�複数定義�れ���場��トリガ�作��れ�順�実行�れ��。

-- 文�トリガ

CREATE TRIGGER t1 NO CASCADE BEFORE UPDATE ON x
  FOR EACH ROW MODE DB2SQL
  values app.notifyEmail('Jerry', 'Table x is about to be updated'); 

CREATE TRIGGER FLIGHTSDELETE
  AFTER DELETE ON FLIGHTS
  REFERENCING OLD_TABLE AS DELETEDFLIGHTS
  FOR EACH STATEMENT 
  DELETE FROM FLIGHTAVAILABILITY WHERE FLIGHT_ID IN
  (SELECT FLIGHT_ID FROM DELETEDFLIGHTS);

CREATE TRIGGER FLIGHTSDELETE3
  AFTER DELETE ON FLIGHTS
  REFERENCING OLD AS OLD
  FOR EACH ROW 
  DELETE FROM FLIGHTAVAILABILITY WHERE FLIGHT_ID = OLD.FLIGHT_ID;
Note: Derby ディベロッパーズ ガイドã?«ã?¯ã‚ˆã‚Šå¤šã??ã?®ä¾‹ã?Œæ›¸ã?‹ã‚Œã?¦ã?„ã?¾ã?™ã€‚

トリガ��帰

トリガ��帰�最大16����。

関連�る情報

ç?¾åœ¨ã?®æ™‚刻やç?¾åœ¨ã?®ãƒ¦ãƒ¼ã‚¶ã‚’è¿”ã?™ç‰¹æ®Šã‚·ã‚¹ãƒ†ãƒ é–¢æ•°ã?¯ã€?トリガを作æˆ?ã?—ã?Ÿã?¨ã??ã?§ã?¯ã?ªã??ã€?トリガã?Œç™ºç?«ã?—ã?Ÿã?¨ã??ã?«è©•価ã?•れã?¾ã?™ã€‚ã?“ã?®ã‚ˆã?†ã?ªé–¢æ•°ã?«ã?¯ä»¥ä¸‹ã?®ã‚‚ã?®ã?Œã?‚りã?¾ã?™ã€‚
Related reference
CREATE FUNCTION æ–‡
CREATE INDEX æ–‡
CREATE PROCEDURE æ–‡
CREATE SCHEMA æ–‡
CREATE SYNONYM æ–‡
CREATE TABLE æ–‡
CREATE VIEW æ–‡