觸發(fā)器是在特定事件發(fā)生時自動執(zhí)行 sql 語句的數(shù)據(jù)庫對象。在 oracle 中,可以通過 create trigger 語句創(chuàng)建觸發(fā)器,該語句指定觸發(fā)器名稱、執(zhí)行時機(jī)、作用表、觸發(fā)事件和 sql 語句代碼。觸發(fā)器可用于在插入、更新或刪除記錄時自動執(zhí)行操作。例如,在 customers 表中插入新記錄時,可以創(chuàng)建一個觸發(fā)器來更新 last_updated 列。觸發(fā)器還可以使用 pl/sql 塊進(jìn)行更復(fù)雜的操作,并支持 row、statement 和 system 等多種類型。
如何使用 Oracle 創(chuàng)建觸發(fā)器
觸發(fā)器是一種在特定事件發(fā)生時自動執(zhí)行 SQL 語句的數(shù)據(jù)庫對象。Oracle 中的觸發(fā)器可用于執(zhí)行各種任務(wù),例如插入、更新或刪除記錄時自動執(zhí)行操作。
創(chuàng)建觸發(fā)器
要創(chuàng)建觸發(fā)器,可以使用 Oracle 的 CREATE TRIGGER 語句。該語句采用以下語法:
CREATE TRIGGER BEFORE | AFTER | INSTEAD OF [FOR EACH ROW] ON FOR AS
登錄后復(fù)制
其中:
:要創(chuàng)建的觸發(fā)器的名稱。
BEFORE | AFTER | INSTEAD OF:指定觸發(fā)器在事件發(fā)生之前、之后或代替事件執(zhí)行。
[FOR EACH ROW]:指定觸發(fā)器應(yīng)為表中的每一行執(zhí)行。如果省略,則觸發(fā)器將僅執(zhí)行一次。
:觸發(fā)器附加到的表。
:觸發(fā)觸發(fā)器的事件,例如 INSERT、UPDATE 或 DELETE。
:觸發(fā)器執(zhí)行的 SQL 語句。
觸發(fā)器示例
以下示例創(chuàng)建一個觸發(fā)器,在 customers 表中插入新記錄時更新 last_updated 列:
CREATE TRIGGER trg_customers_update BEFORE INSERT ON customers FOR EACH ROW AS BEGIN :NEW.last_updated := SYSDATE; END;
登錄后復(fù)制
此觸發(fā)器在插入新記錄之前將 last_updated 列設(shè)置為系統(tǒng)日期。
注意:
觸發(fā)器還可以使用 PL/SQL 塊進(jìn)行更復(fù)雜的操作。
Oracle 支持多種類型的觸發(fā)器,包括 Row、Statement 和 System 觸發(fā)器。
創(chuàng)建觸發(fā)器時,應(yīng)考慮性能影響和觸發(fā)器行為的預(yù)期后果。