触发示例代码Ex#10
=======================
触发触发器
----------------------------------------
create or replace trigger mytrig instead of delete or insert or update on eview
declare
a number(2);
begin
if inserting then
select count(deptno) into a from dept where deptno= :new.deptno;
if a=0 then
insert into dept values(:new.deptno,:new.dname,:new.loc);
insert into emp ( empno,ename,sal,deptno) values(:new.empno,:new.ename,:new.sal,:new.deptno);
else
insert into emp ( empno,ename,sal,deptno) values(:new.empno,:new.ename,:new.sal,:new.deptno);
end if;
elsif deleting then
delete from emp where deptno= :new.deptno;
elsif updating then
if :new.deptno is not null then
raise_application_error(-20003,'cannot update the deptno,dname,loc columns OR cannot use deptno for updating');
else
update emp set empno=:new.empno, ename= :new.ename, sal= :new.sal where empno=:new.empno;
end if;
end if;
end;
注意:-而不是总是将触发器写在复杂视图的视图上,在这些视图中,由于级联依赖性而无法更新所有基表或插入记录。
1.默认情况下,所有触发的触发器都是行级的。
2.只能在视图上定义“代替触发器”。
有关触发器的更多信息
===========================
禁用/启用触发器:
--------------------------------------------------
ALTER TRIGGER <trig_name>启用| [DISABLE];
ALTER TABLE <表名称>启用| [DISABLE]所有触发器;
拖放触发器:
---------------------------------
DROP TRIGGER <TRIGNAME>;
获取触发器的详细信息:
-------------------------------------------------- --
desc USER_TRIGGERS
desc ALL_TRIGGERS
触发器限制
==================
1.触发表中只能指定一张桌子。
2.触发不能包括提交,回滚和保存点或任何设置操作。
3.TRIGGER BODY无法声明任何LONG或LOB数据类型。
-------------------------------------------------- ------------------------------
From: https://bytes.com/topic/oracle/insights/661765-triggers-3-a