`
yanchencheng
  • 浏览: 21226 次
  • 性别: Icon_minigender_1
  • 来自: 北京
最近访客 更多访客>>
社区版块
存档分类
最新评论

多表可更新视图的实现

阅读更多
 
转摘 www.oradev.net->法师的技术笔记-多表可更新视图的实现
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可能无法实现更新功能。
分享到:
评论

相关推荐

    Oracle中基于多表的可更新视图的实现与应用.pdf

    "Oracle中基于多表的可更新视图的实现与应用.pdf" Oracle数据库中基于多表的可更新视图的实现与应用是指在Oracle数据库中,基于多个表的可更新视图的实现和应用。可更新视图是指可以进行插入、修改和删除数据操作的...

    SQL Server 利用触发器对多表视图进行更新的实现方法

    本示例展示了如何利用触发器来实现对多表视图的更新,具体涉及了以下几个关键知识点: 1. **触发器的类型**: - 在SQL Server中,有DML(Data Manipulation Language)触发器和DDL(Data Definition Language)...

    abap 维护表视图

    - `集合表视图`用于组合多个表的数据,提供单一的访问接口。 3. **维护表视图** - 在ABAP Development Workbench中,你可以使用SE11事务代码来维护透明表视图,SE16N用于结构化表视图。 - 这些工具允许你查看、...

    多视图的实现即一个文档有多个相关联的视图,不是分割视图

    多视图设计则更注重于逻辑上的分离,视图可以是独立的窗口,也可以是在同一窗口内的可切换面板,但它们共享同一个数据模型,而不是简单的屏幕空间划分。 4. **实现机制**: 多视图的实现通常涉及到以下几个关键点...

    物化视图的两种实现

    物化视图的定时更新具有一定的灵活性和可控性。你可以根据业务需求设置不同的刷新频率,比如每天一次、每小时一次或者在业务低峰期自动刷新。同时,这种方式也可以避免在数据量大时对数据库造成过多压力,因为更新...

    Oracle数据库应用中的可更新视图设计.pdf

    为了实现多表视图的更新,可能需要借助触发器(Triggers)来确保数据的一致性和完整性。触发器是一种数据库对象,可以在数据修改前或后自动执行指定的SQL语句,以此来处理复杂的业务规则或确保视图更新的正确性。 ...

    oracle实现带参数视图

    ### Oracle 实现带参数视图 #### 背景与概念 在数据库设计与管理过程中,视图(View)作为一种虚拟表,对于简化查询、增强数据安全性和提供数据抽象具有重要作用。然而,标准的视图定义是静态的,无法根据不同的...

    VC++ 实现多窗口多视图例子

    在VC++编程环境中,实现多窗口多视图的应用程序是一项常见的任务,这主要涉及到MFC(Microsoft Foundation Classes)框架的应用。MFC是微软为Windows平台提供的C++类库,它封装了Windows API,使得开发者可以更高效...

    数据库实验2 视图与多表查询.doc

    数据库实验2 视图与多表查询 以下是基于给定的文件信息生成的相关知识点: 1. 数据库管理系统(DBMS)的功能和软件组成:DBMS 是一种软件系统,用于定义、创建、维护和操纵数据库。DBMS 的主要功能包括数据定义、...

    Qt之模型/视图(实时更新数据)

    在"Qt之模型/视图(实时更新数据)"的场景中,我们主要关注如何在Qt环境中实现一个MVC(Model-View-Controller)程序,以实现实时更新数据的功能。 首先,模型(Model)是数据的核心,它负责存储和管理数据。在这个...

    mfc 窗口分割实现多视图切换

    本篇文章将详细探讨MFC如何实现窗口分割以及在分割窗口中进行多视图的切换。 首先,MFC提供了一个名为CSplitterWnd的类,它专门用于创建窗口分割。CSplitterWnd可以创建水平或垂直的分割条,使得窗口可以被划分为两...

    swift-一个方法实现表头部视图缩放

    本文将深入探讨如何使用Swift实现一个表头部视图缩放的效果,这通常用于模仿像Apple Music那样的头部渐变放大效果,增强用户的交互体验。 首先,我们需要了解表视图(UITableView)的基本结构和工作原理。表视图是...

    osg_multiViewer用osg实现多视图

    在计算机图形学领域,OpenSceneGraph (简称OSG) 是一个强大的开源库,用于构建高性能的3D图形...如果你希望进一步探索这个话题,可以下载并研究提供的"osg_multiViewer"源代码,这将有助于加深对OSG多视图实现的理解。

    MFC多文档多视图编程

    例如,用户在视图上执行操作时,视图会接收到消息并处理,如果需要更新文档,视图会调用`CDocument::UpdateAllViews`通知所有相关的视图进行更新。视图通常会重写`OnUpdate`方法以响应文档的改变,并可能调用`OnDraw...

    vc++实现的视图放大缩小功能,居于mfc的CScrollview

    这需要重写OnHScroll和OnVScroll函数,根据滚动条的滑块位置更新视图的显示。同时,为了使缩放操作平滑进行,可能还需要添加鼠标滚轮事件处理,以便用户可以通过滚轮快速调整缩放级别。 除了基本的放大缩小功能,还...

    分节表视图_动态

    而分节表视图则在UITableView的基础上增加了“节”的概念,每个节(Section)可以包含多个Cell。通过分节,我们可以更好地组织数据,为用户提供清晰的视觉层次。 创建分节表视图涉及以下几个关键步骤: 1. 数据...

    oracle实验3-数据更新与视图.doc

    Oracle实验3-数据更新与视图 本实验旨在掌握数据更新和视图的操作方法。在实验中,我们将学习数据插入、修改和删除语句的语法格式和使用方法,以及视图的定义和操作方法。 一、数据更新 在实验中,我们使用 SQL ...

    利用VTK实现MPR 多角度视图

    总的来说,利用VTK实现MPR多角度视图涉及到医学图像处理、计算机图形学和软件工程的多个方面。理解VTK的核心组件及其相互作用是成功实现这一功能的关键。通过深入学习和实践,你可以创建出功能强大且灵活的MPR系统,...

    视图分割,多视图通讯

    在提供的"Demo"文件中,很可能是包含了一个实际的代码示例,演示了如何在SDI应用中实现视图分割和多视图通讯。这个示例可能包含了创建和布局子视图的代码,以及实现视图间通信的消息处理和数据同步逻辑。通过分析和...

Global site tag (gtag.js) - Google Analytics