/**
语句级触发器,能同时被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;