1 前言
多表视图的定义:当视图的数据源只有一张数据表,则该视图为单表视图;当视图的数据源是多张数据表,则该视图为多表视图。
可更新视图的定义:在绝大多数人的概念中,视图是只读的,不允许修改。ORACLE 8i以上版本,单表视图如果没有设定With Read Only,则该视图是可以更新的,对视图的操作将直接写入的数据表中。
那么,如果视图的数据源是多张数据表,而多表视图如果实现可更新视图,则可以大大提高编码的效率。

2 多表可更新视图的应用范围
在程序实现过程中,我们往往会将诸如产品编号、计量单位、客户信息等等存储于独立的数据表,在销售单据、出入库单据等处,引用其主键ID,就可以指向相关详细信息。
在查询视图上,我们仅需要确定关联关系即可,但在数据录入界面,我们要实现多表信息同步编辑功能时,往往会遇到困扰。需要应用各种各样的编程方法,实现用户需求。
多表可更新视图大大简化前台编程的工作量,对于前台FORM,可以认为该多表可更新视图就是一张完整的业务数据表,而数据的存储逻辑则建立于后台视图的Instead of 触发器中。

3 多表可更新视图的后台实现
建立多表视图的Instead Of Trigger,在Trigger中定义数据存储逻辑,就实现了多表可更新视图<复杂的技术难点,解决的方法往往是无比简单的>。实例如下:
3.1 创建测试数据表
--===================================================
--创建测试表
--===================================================
Drop Table t1;
Drop Table t2;
create table t1
( t11 numeric(28),t12 varchar2(20));
create table t2
( t11 numeric(28),t22 varchar2(20));
3.2 多表视图范例
--===================================================
--创建测试视图
--===================================================
create Or Replace view t as
   select T1.t11 f1 ,T1.t12 f2 ,T2.t22 f3
      from T1,T2
      Where T1.t11=T2.t11;
3.3 多表视图触发器范例      
--===================================================
--创建视图的替代触发器
--===================================================
Create Or Replace Trigger Trg_InsUpdDel_t
Instead Of Insert or update or delete
on t
for each row
Declare
begin
   If Inserting Then
      Insert Into t1 (t11,t12) Values (:New.f1,:New.f2);
      Insert Into t2 (t11,t22) Values (:New.f1,:New.f3);
   elsif Updating Then
      Update t1 set t11=:New.f1,t12=:New.f2 where t11=:New.f1;
      Update t2 set t11=:New.f1,t22=:New.f3 where t11=:New.f1;
   elsif Deleting then
      Delete from t1 where t11=:Old.f1;
      Delete from t2 where t11=:Old.f1;
   End if;
end;
如此即实现多表可更新视图的定义工作,大家可以试着使用Insert或Delete或Update的SQL语句测试一下。
3.4 数据库后台注意事项
当视图使用Create Or Replace View...重新编译后,该触发器就会被覆盖,找不到了。所以大家记得在重新编译多表可更新视图之后,要重新创建其触发器。

4 多表可更新视图的前台实现及注意事项
4.1 基本实现
在数据源中,定义数据块的数据源为多表可更新视图,即可实现前台设定。
当然还有许多注意事项,否则大家在实际应用过程中就会觉得困难重重。
4.2 FORM前台注意事项
4.2.1 主键,如果多表可更新视图中,包括外联<如:Where t1.t11=t2.t11(+)>,则必须在FORM中定义主键,包括数据块的主键和数据项的主键属性。否则,FORM将会提示“视图不允许更新”。
4.2.2 SQL,多表视图如果使用Union或Distinct,则前台FORM可能无法实现更新功能。

转载于:https://www.cnblogs.com/Struts-pring/archive/2013/04/23/3037016.html

oracle 多表视图更新相关推荐

  1. Oracle多表关联更新

    这里写目录标题 Oracle多表关联更新 一.最简单的形式-单表更新 二.两表(多表)关联update -- set为简单的数据(直接是值),且仅在where字句中的连接 三.两表(多表)关联upda ...

  2. oracle同时更新多列数据,ORACLE 11G 表联合更新多列

    -- ORACLE 11G  表联合更新多列 update apps.SGD_ACTUAL_WIP_COST cst set (cst.ITEM_ID,cst.WIP_ENTITY_ID,cst.ST ...

  3. oracle多表联合查询更新,ORACLE 两表关联更新三种方式

    不多说了,我们来做实验吧. 创建如下表数据 select * from t1 ; select * from t2; 现需求:参照T2表,修改T1表,修改条件为两表的fname列内容一致. 方式1,u ...

  4. oracle视图不可更新,Oracle内联视图更新遇到的问题.

    遇到一个批量更新的需求. 我打算用内联视图更新+where in list的技巧处理 UPDATE ( SELECT /*+ BYPASS_UJVC */ * FROM mvbox_space.mus ...

  5. oracle系统视图更新,Oracle内联视图更新遇到的问题

    遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理. 遇到一个批量更新的需求,我打算用内联视图更新+where in list的技巧处理. UPDATE ( SELEC ...

  6. oracle 关系 表 视图_oracle动态视图v$,v_$,gv$,gv_$与x$之间的关系

    前言:在oracle运维的过程中,经常会使用到一些以V$开头的动态视图,比如V$session, 有一次偶然看到有人用V_$session, 初以为别人写错了,没想到desc v_$session以后 ...

  7. oracle 多表关联更新,需要更新的字段在另一个表里(lfn)

    update customers a -- 使用别名 set city_name=(select b.city_name from tmp_cust_city b where b.customer_i ...

  8. oracle 关系 表 视图_oracle主要的动态视图与基表的对应关系

    动态视图 基表 GV$ACCESS x$ksuses,x$kglob,x$kgldp,x$kgllk GV$ACTIVE_INSTANCES x$ksimsi GV$ACTIVE_SESS_POOL_ ...

  9. oracle 关系 表 视图_oracle重要的动态视图与基表的对应关系

    动态视图 基表 GV$ACCESS x$ksuses,x$kglob,x$kgldp,x$kgllk GV$ACTIVE_INSTANCES x$ksimsi GV$ACTIVE_SESS_POOL_ ...

最新文章

  1. 掌握 Linux 调试技术【转】
  2. 使用ARouter实现组件化
  3. 系统重构的10点经验总结
  4. UNITY崩溃的日志
  5. java8中方法区的内存大小如何设置_从Java8升级到Java11
  6. 数据结构(一)快速排序
  7. 光纤熔接盒盘线方法_唐品小课堂光纤色谱
  8. linux 内核usb,Linux 内核示例程序 usb_skeleton.c 详解
  9. MicroDicom viewer(Dicom格式看图软件) v3.4.7官方版
  10. C语言实现99乘法表
  11. Oracle 日期相减获取年龄
  12. python海龟画五角星随机_Python turtle 绘制五角星
  13. html网页打开很小,IE浏览器打开链接新窗口很小如何解决?
  14. html5绘制图形渐变-径向渐变
  15. MB6S-ASEMI高档品质LED驱动器电源适配整流桥
  16. 使用JavaScript进行进制转换将字符串转换为十进制
  17. 谷歌最新的百分比布局库的示例项目
  18. GitHub已标星72K阿里内部878页性能优化笔记限时免费
  19. 企业级微服务构建-01搭建和使用Maven私有仓库(Nexus)-05仓库管理
  20. python怎么算积分_python使用sympy不定积分入门及求解

热门文章

  1. Asp组件初级入门与精通系列之六
  2. charles测试学习 手机端连接电脑进行抓包分析
  3. python七巧板代码_canvas绘制七巧板
  4. 失败原因【object object】_使用前端框架Vue的原因!
  5. sublime配置java编译运行环境(亲测有效)
  6. 短期逾期影响贷款吗?
  7. 现在很多人到农村买桑叶来吃,桑叶真的可以吃吗?
  8. 之前8年都在上班工资16000,厌倦了天天上班的日子,就裸辞了。现在很迷茫,下一步怎么办?
  9. 性格倔强的女人,在感情中很难幸福
  10. 互联网的大厂就那么几家,所以很多员工跳槽后都是互相流动的