全部產品
Search
文件中心

PolarDB:建立觸發器

更新時間:Jul 06, 2024

CREATE TRIGGER 命令定義將儲存在資料庫中的觸發器並對其進行命名。

文法

定義新觸發器

CREATE TRIGGER

概要

CREATE [ OR REPLACE ] TRIGGER name
  { BEFORE | AFTER | INSTEAD OF }
  { INSERT | UPDATE | DELETE }
      [ OR { INSERT | UPDATE | DELETE } ] [, ...]
    ON table
  [ REFERENCING { OLD AS old | NEW AS new } ...]
  [ FOR EACH ROW ]
  [ WHEN condition ]
  [ DECLARE
      [ PRAGMA AUTONOMOUS_TRANSACTION; ]
      declaration; [, ...] ]
    BEGIN
      statement; [, ...]
  [ EXCEPTION
    { WHEN exception [ OR exception ] [...] THEN
        statement; [, ...] } [, ...]
  ]
    END

說明

CREATE TRIGGER 定義新觸發器。CREATE OR REPLACE TRIGGER 將建立新觸發器,或替換現有定義。

如果使用 CREATE TRIGGER 關鍵字建立新觸發器,則新觸發器的名稱不得與同一表中定義的任何現有觸發器匹配。新觸發器將在與定義觸發事件的表相同的 schema 中建立。

如果要更新現有觸發器的定義,可使用 CREATE OR REPLACE TRIGGER 關鍵字。

當使用與 Oracle 資料庫相容的文法建立觸發器時,觸發器作為 SECURITY DEFINER 函數運行。

參數

參數 說明
name 要建立的觸發器的名稱。
BEFORE | AFTER 確定是在觸發事件之前還是之後觸發觸發器。
INSERT | UPDATE | DELETE 定義觸發事件。
table 在其中發生觸發事件的表的名稱。
condition condition 是 Boolean 運算式,確定是否實際執行觸發器;如果 condition 的求值結果為 TRUE,則將觸發觸發器。

如果觸發器定義包含 FOR EACH ROW 關鍵字,那麼 WHEN 子句可以分別通過寫入 OLD.column_name 或 NEW.column_name 來引用舊和/或新行值的列。INSERT 觸發器無法引用 OLD,DELETE 觸發器無法引用 NEW。

如果觸發器包含 INSTEAD OF 關鍵字,則可能不會包含 WHEN 子句。

WHEN 子句不能包含子查詢。

REFERENCING { OLD AS old | NEW AS new } ... 用於引用舊行和新行的 REFERENCING 子句,但受到限制,因為 old 只能由名為 old 的標識符或以全小寫形式儲存的任何等效項替換(例如,REFERENCING OLD AS old、REFERENCING OLD AS OLD 或 REFERENCING OLD AS "old")。此外,new 只能由名為 new 的標識符或以全小寫形式儲存的任何等效項替換(例如,REFERENCING NEW AS new、REFERENCING NEW AS NEW 或 REFERENCING NEW AS "new")。

可以在 REFERENCING 子句中指定以下兩個短語或其中一個:OLD AS old 和 NEW AS new(例如,REFERENCING NEW AS New OLD AS Old)。

此子句與 Oracle 資料庫不相容,因為不能使用 old 或 new 之外的標識符。

FOR EACH ROW 確定是應當為受觸發事件影響的每一行觸發一次觸發器,還是只按每個 SQL 陳述式觸發一次。如果指定,則為受影響的每一行觸發一次觸發器(行級觸發器),否則觸發器為語句級觸發器。
PRAGMA AUTONOMOUS_TRANSACTION PRAGMA AUTONOMOUS_TRANSACTION 是將觸發器設定為自治事務的指令。
declaration 變數、類型、REF CURSOR 或子程式聲明。如果包括子程式聲明,則它們必須在所有其他變數、類型和 REF CURSOR 聲明之後。
statement 一個 SPL 程式語句。請注意,DECLARE - BEGIN - END 塊被視為 SPL 語句本身。因此,觸發器主體可能包含嵌套塊。
exception 異常條件名稱,如 NO_DATA_FOUND、OTHERS 等。