在 Oracle Database 中,
常用到的觸發 Trigger,
不外乎就是 Insert Trigger / Update Trigger / Delete Trigger,
以下大致提供我的 Trigger 範本,
方便大家在撰寫 DB Trigger 時, 可以快速上手 :
Insert Trigger 範本
CREATE OR REPLACE TRIGGER "INS_<Table_Name>" AFTER INSERT ON "<Table_Name>"
FOR EACH ROW
DECLARE
V_ERRNO INTEGER;
V_ERRMSG VARCHAR2(200);
BEGIN
-- 使用 :NEW.<Column_Name> 運作
EXCEPTION
WHEN OTHERS THEN
V_ERRNO := -20002;
V_ERRMSG := '<錯誤訊息>';
RAISE_APPLICATION_ERROR( V_ERRNO, V_ERRMSG );
END;
Update Trigger 範本
CREATE OR REPLACE TRIGGER "UPD_<Table_Name>" BEFORE UPDATE OF "<Column>","<Column2>",... ON "<Table_Name>"
FOR EACH ROW
DECLARE
V_ERRNO INTEGER;
V_ERRMSG VARCHAR2(200);
BEGIN
-- 使用 :NEW.<Column_Name> / :OLD.<Column_Name> 運作
EXCEPTION
WHEN OTHERS THEN
V_ERRNO := -20002;
V_ERRMSG := '<錯誤訊息>';
RAISE_APPLICATION_ERROR( V_ERRNO, V_ERRMSG );
END;
Delete Trigger 範本
CREATE OR REPLACE TRIGGER "DEL_<Table_Name>" BEFORE DELETE ON "<Table_Name>"
FOR EACH ROW
DECLARE
V_ERRNO INTEGER;
V_ERRMSG VARCHAR2(200);
BEGIN
-- 使用 :OLD.<Column_Name> 運作
EXCEPTION
WHEN OTHERS THEN
V_ERRNO := -20002;
V_ERRMSG := '<錯誤訊息>';
RAISE_APPLICATION_ERROR( V_ERRNO, V_ERRMSG );
END;
Insert/Update/Delete Trigger 範本
CREATE OR REPLACE TRIGGER "IUD_<Table_Name>" BEFORE INSERT OR DELETE OR UPDATE [OF "<Update_Column>"] ON "<Table_Name>"
FOR EACH ROW
DECLARE
V_ERRNO INTEGER;
V_ERRMSG VARCHAR2(200);
BEGIN
-- 新增
IF INSERTING THEN
-- 只能使用 :NEW.<Column_Name> 運作
-- 修改
ELSIF UPDATING THEN
-- 可以使用 :NEW.<Column_Name> / :OLD.<Column_Name> 運作
-- 刪除
ELSIF DELETING THEN
-- 只能使用 :OLD.<Column_Name> 運作
END IF;
EXCEPTION
WHEN OTHERS THEN
V_ERRNO := -20002;
V_ERRMSG := '<錯誤訊息>';
RAISE_APPLICATION_ERROR( V_ERRNO, V_ERRMSG );
END;