Symfoware/RDBにおける、トリガの利用方法および定義例を説明します。
Symfoware/RDBにおけるトリガの利用方法を説明します。
格納データの加工(種別:AFTER)
トリガの対象となるSQL文で指定した行を編集できません。したがって、以下の方法で利用します。
格納側の表と同じ構造の表を作業用として用意します。
逐次差分反映では、作業用の表に対して格納します。
作業用の表に対するトリガからプロシジャを呼びます。引数としてすべての入力列を渡します。
プロシジャでは、加工対象の値を加工します。必要な列を指定したSQL文を格納側の表に対して発行します。
格納処理の迂回(種別:BEFORE)
トリガからプロシジャを呼びます。引数として、迂回判定に使用する列を渡します。トリガから呼ばれるプロシジャでは、引数を判定し、迂回条件を満たす場合に、”表A.12 格納処理の迂回時にトリガが返すエラー番号”に示すエラー番号を返します。
なお、エラー番号は以下の手順で返してください。
SQLSTATE、SQLMSGを宣言します。
例外事象に対する処理を宣言します。
”SQLSTATE '60xxx' '60999'”を指定したSIGNAL文を発行します。(xxx:0~9およびA~Zの任意の文字3桁)
Symfoware/RDBにおける、INSERT文に対するトリガの定義例を説明します。
Symfoware/RDBでは、プロシジャを定義してからトリガを定義します。
格納データの加工(種別:AFTER)
プロシジャとトリガを定義します。以下の例では、表TBL1TMPが作業用の表、表TBL1が格納側の表を示します。
EXEC SQL -- トリガから呼ばれるプロシジャ |
プロシジャPROC1では、最初に引数ITEM1を加工し、変数NewItem1に代入します。PKEY,NewItem1,ITEM2を指定した表TBL1へのINSERT文を発行します。
CREATE TRIGGER SCHEMA1.TRIG1 |
表TBL1TMPに対するトリガTRIG1から、すべての列を引数としてプロシジャPROC1を呼びます。
格納処理の迂回(種別:BEFORE)
プロシジャとトリガを定義します。
EXEC SQL -- トリガから呼ばれるプロシジャ |
プロシジャPROC1では、引数ITEM1を判定します。迂回条件を満たす場合に、エラー番号60999を返してプロシジャを終了します。
CREATE TRIGGER SCHEMA1.TRIG1 |
表TBL1に対するトリガTRIG1から、迂回判定の対象となる列ITEM1(NEW.ITEM1)を引数としてプロシジャPROC1を呼びます。