CREATE TRIGGER (信號觸發程式)

使用 CREATE TRIGGER 指令來建立信號觸發程式,該觸發程式會發動以回應 ObjectServer 中的突發事件,或發動以回應使用者定義的信號。

語法

CREATE [ OR REPLACE ] TRIGGER trigger_name
 GROUP group_name
 [ DEBUG { TRUE | FALSE } ]
 [ ENABLED { TRUE | FALSE } ]
 PRIORITY integer
 [ COMMENT 'comment_string' ]
 ON SIGNAL { system_signal_name | user_signal_name }
 [ 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。 數字越低,優先順序越高,因此在優先順序為 3 的觸發程式之前,會先發動優先順序為 2 的觸發程式。 如果因為相同的事件而發動多個具有相同優先順序的觸發程式,則這些觸發程式發動的順序無法判定。

使用選用的 COMMENT 關鍵字為觸發程式新增註解 (comment_string)。

ON 信號名稱可以是發動觸發程式之系統或使用者定義信號的名稱。

選用的 EVALUATE 子句可讓您從單一 SELECT 陳述式建置暫時結果集,以在 trigger_action中處理。 SELECT 陳述式不能包含 ORDER BY 子句。

附註: EVALUATE 子句必須以資料庫名稱完整限定 SELECT 陳述式中包含的任何表格。 例如,下列語法被視為無效: evaluate select Node from status... The correct syntax is: evaluate select Node from alerts.status...

當發出系統或使用者定義的信號時,會將識別信號原因的屬性附加至該信號。 這些屬性會以隱含變數的形式傳遞至相關聯的信號觸發程式。

使用選用的 WHEN 子句,以在觸發程式動作執行之前測試特定 condition。 如果不符合條件,則不會執行觸發程式動作。

您可以選擇性地宣告用於觸發程式主體的本端觸發程式變數。 宣告及使用這些變數的方式與程序變數相同。 但觸發程式變數是靜態的,因此它們的值在兩次執行觸發程式之間保持不變。