關於觸發程式

觸發程式是儲存在資料庫中的 PL/SQL 單位,而且 (如果是啟用狀態) 會自動對指定的事件執行 (「觸發」)。

觸發程式具有以下結構:

TRIGGER trigger_name
  triggering_event
  [ trigger_restriction ]
BEGIN
  triggered_action;
END;

綱要中觸發程式的 trigger_name 必須是唯一的。觸發程式的名稱可以與綱要中別種物件 (例如表格) 的名稱相同;不過,Oracle 建議使用可避免混淆的命名慣例。

如果觸發程式為 enabled 狀態,如果 trigger_restriction 為 TRUE 或省略,觸發程式 _event 會讓資料庫執行 triggered_action。triggering_event 與表格、視圖、綱要或資料庫相關聯,而且是下列其中一項:

如果觸發程式為 disabled 狀態,就算 trigger_restriction 為 TRUE 或省略,觸發程式也不會讓資料庫執行 triggered_action。

依照預設,觸發程式在建立時的狀態為啟用。您可以停用已啟用的觸發程式,也可以啟用已停用的觸發程式。

觸發程式和子程式不同,它是無法直接呼叫的。觸發程式只能由觸發事件呼叫,觸發事件則可以由任何的使用者或應用程式引發。除非觸發程式引發未能適當處理的錯誤,否則您可能會不知道觸發程式正在執行。

簡單觸發程式只能在下列其中一個計時點觸發:

複合觸發器可以在多個時間點觸發。如需複合觸發器的相關資訊,請參閱 Oracle AI Database PL/SQL Language Reference

INSTEAD OF 觸發器是在檢視中定義,而其觸發事件為 DML 敘述句。資料庫不會執行 DML 敘述句,而是執行 INSTEAD OF 觸發程式。如需詳細資訊,請參閱建立 INSTEAD OF 觸發程式

系統觸發程式定義在綱要或資料庫上。定義於綱要的觸發程式會針對與綱要擁有者 (目前擁有者) 相關聯的每個事件執行之。定義於資料庫的觸發程式會針對與所有擁有者相關聯的每個事件執行之。

觸發程式的用途之一就是強制執行套用至所有從屬端應用程式的商業規則。例如,假設新增至 EMPLOYEES 表格的資料必須具有特定格式,且許多用戶端應用程式可以將資料新增至此表格。此表格上的觸發程式可以確保,新增至表格的所有資料都具有適當的格式。由於觸發器會在任何從屬端將資料新增至表格中時執行,因此沒有從屬端可以規避規則,而強制規則的程式碼只能儲存在觸發器中,而非在每個從屬端應用程式中儲存和維護。有關觸發程式的其他用途,請參閱 Oracle AI Database PL/SQL Language Reference

另請參閱:Oracle AI Database PL/SQL Language Reference,瞭解觸發程式的完整資訊