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 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;