Linkexpress Transactional Replication option説明書 |
目次
索引
![]() ![]() |
付録A TRO | > A.3 トリガによるユーザ独自の編集について | > A.3.2 Symfoware/RDBの場合 |
Symfoware/RDBにおける、INSERT文に対するトリガの定義例を説明します。
Symfoware/RDBでは、プロシジャを定義してからトリガを定義します。
プロシジャとトリガを定義します。以下の例では、表TBL1TMPが作業用の表、表TBL1が格納側の表を示します。
EXEC SQL -- トリガから呼ばれるプロシジャ CREATE PROCEDURE SCHEMA1.PROC1(IN PKEY INT, IN ITEM1 INT, IN ITEM2 INT) BEGIN DECLARE NewItem1 INT; SET NewItem1 = ITEM1 * 2; -- 加工 INSERT INTO SCHEMA1.TBL1 VALUES(PKEY, NewItem1, ITEM2); -- 格納(NewItem1はITEM1を加工した値) END END-EXEC; |
プロシジャPROC1では、最初に引数ITEM1を加工し、変数NewItem1に代入します。PKEY,NewItem1,ITEM2を指定した表TBL1へのINSERT文を発行します。
CREATE TRIGGER SCHEMA1.TRIG1 AFTER INSERT ON SCHEMA1.TBL1TMP -- 作業用の表を指定 FOR EACH ROW CALL SCHEMA1.PROC1(NEW.KEYITEM, NEW.ITEM1, NEW.ITEM2) -- トリガからプロシジャを呼ぶ |
表TBL1TMPに対するトリガTRIG1から、すべての列を引数としてプロシジャPROC1を呼びます。
プロシジャとトリガを定義します。
EXEC SQL -- トリガから呼ばれるプロシジャ CREATE PROCEDURE SCHEMA1.PROC1(IN ITEM1 INT) BEGIN DECLARE SQLSTATE CHAR(5); -- 宣言 DECLARE SQLMSG CHAR(256); -- 宣言 DECLARE EXIT HANDLER FOR SQLEXCEPTION BEGIN RESIGNAL; END; -- 例外事象に対する処理の宣言 IF(ITEM1 < 0) THEN -- 迂回判定 SIGNAL SQLSTATE'60999' '60999'; -- エラー番号を返す END IF; END END-EXEC; |
プロシジャPROC1では、引数ITEM1を判定します。迂回条件を満たす場合に、エラー番号60999を返してプロシジャを終了します。
CREATE TRIGGER SCHEMA1.TRIG1 BEFORE INSERT ON SCHEMA1.TBL1 FOR EACH ROW CALL SCHEMA1.PROC1(NEW.ITEM1) -- トリガからプロシジャを呼ぶ |
表TBL1に対するトリガTRIG1から、迂回判定の対象となる列ITEM1(NEW.ITEM1)を引数としてプロシジャPROC1を呼びます。
目次
索引
![]() ![]() |