InterBase クイック スタート:Part V - 変更レコードを保持するトリガを作成する

提供: InterBase

InterBase クイック スタート:Part V - 応用トピック へ戻る

次の CREATE TRIGGER 文を入力して、save_salary_change トリガを作成します。 このトリガは、Salary_history テーブルでの社員の給与に対する変更記録を保持します:

CREATE TRIGGER save_salary_change FOR employee
AFTER UPDATE AS
BEGIN
  IF (OLD.salary <> NEW.salary) THEN
    INSERT INTO salary_history
                (emp_no,
                change_date,
                updater_id,
                old_salary,
                percent_change)
    VALUES
                (OLD.emp_no,
                'NOW',
                USER,
                OLD.salary,
                (NEW.salary - OLD.salary) * 100 / OLD.salary);
END

このトリガは、Employee テーブルの AFTER UPDATE を発生させます。これは、salary 列の値を更新前のものと更新後のものとで比較し、それらが異なっている場合には、Salary_history にレコードを追加します。このテーブルは、社員番号、日付、前の給与、給与における変更の割合から構成されています。

Salary_history テーブルに入力され、Employee テーブルから取り出される値は、常に、Old または New のコンテキスト変数が前にきます。これは、InterBase が更新処理の間、1 つのレコードに対して 2 つのバージョンを作成しており、値がどちらのバージョンのものか指定しなければならないからです。

さらにこの例では、他にも InterBase の機能を 2 つ利用している点に注目してください: 現在日を DATE データ型の列に、単一引用符に囲まれた文字列 'NOW' を指定することで、挿入しています。また、データベースに現在接続しているユーザーの名前を、キーワード USER を指定することにより、挿入しています。

このトリガをテストするには、社員レコードを更新し、給与を変更します。

Image 025.jpg イベントを送信するトリガを作成する

次の CREATE TRIGGER 文を実行して、トリガ post_new_order を作成します。このトリガは、Sales テーブルにレコードが挿入された際に、「new_order」という名のイベントを送信します。

CREATE TRIGGER post_new_order FOR sales
AFTER INSERT AS
BEGIN
  post_event 'new_order';
END

イベントは、トリガまたはストアド プロシージャによって、InterBase イベント マネージャに渡されるメッセージで、特定の条件の発生に関与するアプリケーションに通知します。 イベントへの関与を登録したアプリケーションは、実行を一時保留し、指定したイベントが発生するのを待機することができます。

post_new_order トリガは、新しいレコードが Sales テーブルに挿入された後に発生します。このイベントが発生すると、関与するアプリケーションはアクション(請求書の印刷や発送部署への通知など)を起こします。

次は: