--ORACLE 11g 创建了一个视图,想实现根据视图直接修改原本数据:
--视图
CREATE OR REPLACE VIEW VW_OAWLDW11 AS
SELECT PPSPZSJ_TJRY,ZWWLDW_DWBH,ZWWLDW_DWMC,ZWDWEX_SHBZ FROM ZWWLDW,ZWDWEX
LEFT JOIN PPSPZSJ ON ZWDWEX_DWBH=PPSPZSJ_DJLS
WHERE ZWWLDW_DWBH=ZWDWEX_DWBH AND ZWDWEX_SHBZ<>'1';
--修改
UPDATE VW_OAWLDW11 SET ZWDWEX_SHBZ='4' ;
--执行结果提示
你应该修改你的表数据,然后刷新视图呀,而不是修改视图
直接修改视图依赖的底层表就可以了,不需要对视图直接进行修改
复杂视图不能直接进行DML操作的,如果非要实现对视图进行DML,则需要给视图创建触发器,语法大概是这样的
create or replace trigger trigger_view_login_detail
instead of insert on v_login_detail
for each row
begin
insert into t_login(username,password) values (:NEW.username,:NEW.password);
insert into t_detail(realname,age) values (:NEW.realname,:NEW.age);
end;
/
和其他普通的触发器语法差不多,重点是 “instead of”,即替代,你需要通过这个触发器,告诉数据库打算怎么去修改原表的数据,否则数据库无法仅凭对视图进行的DML操作来理解你的意图