CREATE TRIGGER (時間トリガー)

CREATE TRIGGER コマンドを使用して、指定した頻度で作動させる時間トリガーを 作成します。

構文

CREATE [ OR REPLACE ] TRIGGER trigger_name
 GROUP group_name
 [ DEBUG { TRUE | FALSE } ]
 [ ENABLED { TRUE | FALSE } ]
 PRIORITY integer
 [ COMMENT 'comment_string'
 EVERY integer { HOURS | MINUTES | SECONDS }
 [ EVALUATE SELECT_cmd BIND AS variable_name ]
 [ WHEN condition ]
 [ DECLARE variable_declaration ]
BEGIN
  trigger_action
END;

作成しようとしているトリガーと同じ名前を持つトリガーが既に存在している可能性がある場合は、オプションの OR REPLACE キーワードを使用してください。 そのようなトリガーが存在している場合、そのトリガーは作成しようとしているトリガーで置き換えられます。 そのようなトリガーが存在していない場合は、新規のトリガーが作成されます。

trigger_name 値は ObjectServer 内で固有にする必要があり、ObjectServer の命名規則に準拠している必要があります。

group_name 値には、CREATE TRIGGER GROUP コマンドを使用して既に作成されている任意のトリガー・グループを指定できます。

DEBUG が次のように設定されている場合TRUEメッセージ・レベルが debugに設定されている場合、デバッグ情報が ObjectServer メッセージ・ログに送信されます。

ENABLED が以下のように設定されているとします。TRUE関連するインシデントが発生すると、トリガーが起動します。 そのように設定されていない場合は、機能不良が発生してもトリガーは起動しません。

複数のトリガーが同一の機能不良に関連付けられている場合は、トリガーの優先順位により ObjectServer がトリガーを起動する順序が決まります。 この優先順位は 1 から 20 の範囲にあります。 数値が小さいほど優先順位が高くなるため、優先順位が 2 のトリガーは優先順位が 3 のトリガーの前に起動されます。 同じインシデントのために同じ優先順位の複数のトリガーが起動される場合、これらのトリガーの起動順序は決定されません。

トリガーに関するコメント (comment_string) を追加する場合は、オプションの COMMENT キーワードを使用します。

時間トリガーでは、トリガーを作動させる頻度を 指定する必要があります。 秒 (デフォルトの時間単位)、分、または時間単位で integer 値を指定します。

オプションの EVALUATE 節を使用して、 trigger_action 内で処理される単一の SELECT ステートメントから、一時的な結果セットをビルドします。 SELECT ステートメントには、 ORDER BY 節を含めることはできません。

注: EVALUATE 節は、SELECT ステートメントに含まれるすべての表をデータベース名で完全に修飾する必要があります。 例えば、次の構文は無効と見なされます。 evaluate select Node from status... The correct syntax is: evaluate select Node from alerts.status...

ほとんどの場合、EVALUATE 節は FOR EACH ROW 節に置き換えることができます。 EVALUATE 節は、GROUP BY 節が必要な場合にのみ使用してください。

トリガー・アクションを実行する前に特定の条件に対してテストを行うには、オプションの WHEN 文節を使用します。 この条件が満たされない場合は、トリガー・アクションは実行されません。

オプションで、ローカル・トリガー変数を宣言して、それをトリガー本体で使用できます。 これらの変数の宣言方法と使用方法は、プロシージャー変数の場合と同じです。 ただし、トリガー変数は静的であるため、トリガー変数は次のトリガーが実行するまでの間、その値を維持します。

以下の時間トリガーでは、 alerts.status 表から最後の 2 分間に変更されなかったすべてのクリア行 (Severity = 0) が削除されます。

create trigger DeleteClears
group my_triggers
priority 1
every 60 seconds
begin
   delete from alerts.status where Severity = 0
      and StateChange < (getdate - 120);
end;