由于视图有可能是由多个表进行关联而成,这种情况下,直接通过更新视图来更新基表是不可行的,这个时候我们就可以通过替代触发器来工作了。
示例:
--准备操作 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 |