CREATE TRIGGER trigger_name
{BEFORE | AFTER} {INSERT | DELETE | UPDATE [OF col]} ON table_name
FOR EACH ROW
BEGIN
-- PL/SQL 塊
END;
-- INSERT 同步
CREATE TRIGGER tri_emp_ins AFTER INSERT ON employees
FOR EACH ROW
INSERT INTO emp_backup VALUES (:NEW.sno, :NEW.sname, :NEW.sex, :NEW.depart);
-- DELETE 同步
CREATE TRIGGER tri_emp_del AFTER DELETE ON employees
FOR EACH ROW
DELETE FROM emp_backup WHERE sno = :OLD.sno;
-- UPDATE 同步
CREATE TRIGGER tri_emp_upd AFTER UPDATE ON employees
FOR EACH ROW
BEGIN
DELETE FROM emp_backup WHERE sno = :OLD.sno;
INSERT INTO emp_backup VALUES (:NEW.sno, :NEW.sname, :NEW.sex, :NEW.depart);
END;
錯誤代碼:INSERT INTO emp_backup VALUES (emp_old.sno, ...)
原因:觸發器體內不能直接用 表名.欄位,必須用偽記錄 :NEW/:OLD。
修正:INSERT INTO emp_backup VALUES (:NEW.sno, :NEW.sname, ...)
BEFORE 可修改 :NEW 值,AFTER 僅可讀BEGIN ... END; 內,每句以分號結尾