利用触发器对在 scott.emp 表上执行的 DML 操作进行安全性检查,只有 scott 用户登录数据库后才能向该表中执行 DML 操作,这是一个语句级触发器,DML 语句不论影响多少行数据,触发器只被调用一次。
1 2 3 4 5 6 7 8
createor replace trigger tri_dm1 before insertor update ordeleteon scott.emp begin if user<>'SCOTT'then raise_application_error(-20001,'You don''t have access to modify this table.'); end if; end; /
在 scott 用户下创建能实现 scott.emp 和 employee 两表之间同步复制的 DML 触发器。
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17
createor replace trigger duplicate_emp after update orinsertordeleteon scott.emp foreachrow begin if inserting then insertinto employee values (:new.empno,:new.ename,:new.job,:new.mgr, :new.hiredate,:new.sal,:new.comm,:new.deptno); elsif deleting then deletefrom employee where empno=:old.empno; else update employee set empno=:new.empno,ename=:new.ename,job=:new.job, mgr=:new.mgr,hiredate=:new.hiredate,sal=:new.sal,comm=:new.comm, deptno=:new.deptno where empno=:old.empno; end if; end; /
createor replace trigger dm1_log after insertor update ordeleteon scott.emp declare oper emp_log.oper%type; begin if inserting then oper:='insert'; elsif deleting then oper:='delete'; else oper:='update'; end if; insertinto emp_log values(user,sysdate,oper); end; /
createor replace trigger update_som_edi_temp before inserton som_edi_temp_d foreachrow declare
begin
select msib.default_shipping_org into :new.ship_from_org_id from mtl_customer_items mci ,mtl_customer_item_xrefs mcix ,mtl_system_items_b msib where1=1 and mci.customer_item_id = mcix.customer_item_id and mci.inactive_flag ='N' and mcix.inventory_item_id = msib.inventory_item_id and mcix.inactive_flag ='N' and mci.customer_item_number = :new.customer_item_number groupby msib.default_shipping_org; exception when others then null;