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;

 

posted @ 2012-10-12 14:10  残阳飞雪  阅读(488)  评论(0编辑  收藏  举报