/** 语句级触发器,能同时被insert、update、delete触发,记录到表中: 触发时记录什么动作发生在emp表上,是否修改了ename列以及是否修改了empno列**/ CREATE OR REPLACE TRIGGER tri_dml_emp BEFORE insert or update OF ENAME, EMPNO or delete on emp DECLARE V_TYPE VARCHAR2(10); V_DESC VARCHAR2(100); BEGIN IF INSERTING THEN V_TYPE := 'INS'; ELSIF UPDATING THEN V_TYPE := 'UPD'; ELSIF DELETING THEN V_TYPE := 'DEL'; END IF; IF UPDATING('EMPNO') THEN V_DESC := '更新EMPNO'; ELSE V_DESC := '没有更新EMPNO'; END IF; IF UPDATING('ENAME') THEN V_DESC := '更新ENAME'; ELSE V_DESC := '没有更新ENAME'; END IF; INSERT INTO BB VALUES (V_TYPE, V_DESC); END TRI_DML_EMP; /**编写一个行级触发器,能同时被insert、update、delete触发,记录到表中: 触发时记录什么动作发生在emp表上,是否修改了ename列以及是否修改了empno列 如果修改了ename列,请记录修改前和修改后的值**/ CREATE OR REPLACE TRIGGER dml_emp BEFORE insert or update OF ENAME, EMPNO or delete on emp FOR EACH ROW DECLARE V_TYPE VARCHAR2(10); V_DESC VARCHAR2(100); BEGIN IF INSERTING THEN V_TYPE := 'INS'; ELSIF UPDATING THEN V_TYPE := 'UPD'; ELSIF DELETING THEN V_TYPE := 'DEL'; END IF; IF UPDATING('ENAME') THEN V_DESC := '更新ENAME,原ENAME=' || :OLD.ENAME || ' 新ENAME=' || :NEW.ENAME; ELSE IF UPDATING('EMPNO') THEN V_DESC := '更新EMPNO,原EMPNO=' || :OLD.EMPNO || ' 新EMPNO=' || :NEW.EMPNO; ELSE V_DESC := '没有更新'; END IF; END IF; INSERT INTO BB VALUES (V_TYPE, V_DESC); END DML_EMP;
Trigger触发器
猜你喜欢
转载自alvinking.iteye.com/blog/1667255
今日推荐
周排行