Oracle 的一个非常好的触发器例子
CREATE OR REPLACE TRIGGER test_trigger AFTER INSERT OR UPDATE OF sal OR DELETE ON emp FOR EACH ROW BEGIN CASE WHEN INSERTING THEN --当事件为INSERT时,INSERTING为TRUE /* :NEW关键字可以获取新记录的数据,它只能用于行级触发器 */ DBMS_OUTPUT.PUT_LINE('INSERT INTO EMP VALUES('||:NEW.empno||','||:NEW.ename||','||:NEW.job||','||:NEW.mgr||','||:NEW.hiredate||','||:NEW.sal||','||:NEW.comm||','||:NEW.deptno||')'); WHEN UPDATING THEN --当事件为UPDATE时,UPDATING为TRUE DBMS_OUTPUT.PUT_LINE('UPDATING emp which empno='||:OLD.empno||'to sal:'||:NEW.sal);--:OLD关键字可以获取旧记录的数据,它只能用于行级触发器 WHEN DELETING THEN --当事件为DELETE时,DELETING为TRUE DBMS_OUTPUT.PUT_LINE('DELETING emp which empno='||:OLD.empno);--:OLD关键字可以获取旧记录的数据,它只能用于行级触发器 ELSE NULL; END CASE; EXCEPTION WHEN DUP_VAL_ON_INDEX THEN NULL; WHEN OTHERS THEN RAISE_APPLICATION_ERROR(SQLCODE,SQLERRM); END test_trigger;