ページの先頭行へ戻る
Linkexpress Transactional Replication option V5.0L60 説明書
FUJITSU Software

A.3.2 Symfoware/RDBの場合

Symfoware/RDBにおける、トリガの利用方法および定義例を説明します。

A.3.2.1 利用方法

Symfoware/RDBにおけるトリガの利用方法を説明します。

格納データの加工(種別:AFTER)

トリガの対象となるSQL文で指定した行を編集できません。したがって、以下の方法で利用します。

格納処理の迂回(種別:BEFORE)

トリガからプロシジャを呼びます。引数として、迂回判定に使用する列を渡します。トリガから呼ばれるプロシジャでは、引数を判定し、迂回条件を満たす場合に、”表A.12 格納処理の迂回時にトリガが返すエラー番号”に示すエラー番号を返します。
なお、エラー番号は以下の手順で返してください。

  1. SQLSTATE、SQLMSGを宣言します。

  2. 例外事象に対する処理を宣言します。

  3. ”SQLSTATE '60xxx' '60999'”を指定したSIGNAL文を発行します。(xxx:0~9およびA~Zの任意の文字3桁)

A.3.2.2 定義例

Symfoware/RDBにおける、INSERT文に対するトリガの定義例を説明します。

Symfoware/RDBでは、プロシジャを定義してからトリガを定義します。

格納データの加工(種別:AFTER)

プロシジャとトリガを定義します。以下の例では、表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を呼びます。

格納処理の迂回(種別:BEFORE)

プロシジャとトリガを定義します。

トリガから呼ばれるプロシジャの定義例

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を呼びます。