zoukankan      html  css  js  c++  java
  • Oracle 多表视图更新(待看完触发器后再来看)

    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可能无法实现更新功能。



  • 相关阅读:
    《一线架构师实践指南》第三编Refined Architecture阶段读后感
    大数据技术与应用课堂测试2-数据初级分析分类2
    大数据技术与应用课堂测试2-数据初级分析分类
    对Datax的理解
    2020春季学期第三周总结
    可测试性战术总结
    2020春季学期第一周总结
    以《淘宝网》为例,描述质量属性的六个常见属性场景
    软件架构师如何工作
    MapReduce+HIVE 课堂练习
  • 原文地址:https://www.cnblogs.com/JSD1207ZX/p/9386324.html
Copyright © 2011-2022 走看看