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