instead of 触发器


下面一些情况不能对视图进行更新(DML操作)
(1)具有集合操作符(union, union all ,intersect,minus);
(2)具有分组函数(min,max,sum,avg,count)
(3)具有group by ,或start with
(4)具有distinct 关键字
(5)具有连接查询。

什么时候使用instead of 触发器
(1) instead of 触发器只适用于视图
(2)基于视图建立的触发器,不能指定before,after 选项;
(3)在建立视图时,没有指定 with check option;
(4)在建立instead of 触发器时,必须指定for each row;

-格式
CREATE [OR REPLACE] TRIGGER trigger_name
timing
event1 [OR event2 OR event3]
ON table_name
[REFERENCING OLD AS old | NEW AS new]
FOR EACH ROW
[WHEN (condition)]
trigger_body

/*
建立 dep_emp复杂的视图
*/
create or replace view dep_emp
as
select d.depno,e.empno, e.empname,d.depname,e.sal,e.job from emp e ,dep d
where d.depno = e.depno;

/*
建立instread of 触发器
*/

create or replace trigger tri_instread_of_dep_emp
instead of insert
on dep_emp
for each row
declare
v_tem int ;
begin
select count(*) into v_tem from dep where depno = :new.depno;
if v_tem =0 then
insert into dep values(:new.depno,:new.depname);
end if;
select count(*) into v_tem from emp where empno = :new.empno;
if v_tem =0 then
insert into emp values(:new.empno,:new.empname,:new.depno,:new.job,:new.sal);
end if;
end;

insert into dep_emp values(005,08,’王瑶’,’文化部’,5000,’文员’);

注释:通过建立上面视图,就可以更新视图中的数据,通过上面这条insert语句,就会向emp和dep表中各插入一条数据。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值