Linkexpress Transactional Replication option説明書
目次 索引 前ページ次ページ

付録A TRO> A.3 トリガによるユーザ独自の編集について> A.3.2 Symfoware/RDBの場合

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


目次 索引 前ページ次ページ

Copyright FUJITSU LIMITED 2007-2009