Oracle替代触发器

时间:2021-08-15 05:06:25

Oracle替代触发器

由于视图有可能是由多个表进行关联而成,这种情况下,直接通过更新视图来更新基表是不可行的,这个时候我们就可以通过替代触发器来工作了。

 

示例:

--准备操作

INSERT INTO DEPT(DEPTNO,DNAME,LOC) VALUES(60,'研发部','上海');

INSERT INTO EMP(EMPNO, ENAME,JOB,

                MGR,HIREDATE,SAL,

                COMM,DEPTNO)

              VALUES(1001,'贾宝玉','程序员',7788,TO_DATE ('2013-02-03','YYYY-MM-DD'),8000,1000,60);

            

CREATE VIEW emp_info_view

 AS

 SELECT E.EMPNO,E.ENAME,E.JOB,E.SAL,D.DNAME,D.LOC

 FROM EMP e JOIN DEPT d ON e.deptno=d.deptno ;

 

 SELECT * FROM emp_info_view

 

--创建替代触发器

create or replace trigger emp_info_view_trigger instead of update 

    on emp_info_view for each row 

 begin 

  update dept set dname=:new.dname,loc=:new.loc

  where dname=:new.dname; 

 end;

--更新视图

update emp_info_view set loc='杭州' where dname='研发部'

--查询结果

SELECT * FROM dept