oracle 表view,oracle view的更新

本文探讨了多表视图的概念,特别是在Oracle 8i及以上版本中,如何实现单表视图的可更新特性,并扩展到多表视图。通过实例说明了如何创建可更新的多表视图,以及在前后台的实现方式、注意事项,旨在提升编码效率。
摘要由CSDN通过智能技术生成

多表视图的定义:当视图的数据源只有一张数据表,则该视图为单表视图;当视图的数据源是多张数据表,则该视图为多表视图。

可更新视图的定义:在绝大多数人的概念中,视图是只读的,不允许修改。ORACLE 8i以上版本,单表视图如果没有设定With Read

Only,则该视图是可以更新的,对视图的操作将直接写入的数据表中。

那么,如果视图的数据源是多张数据表,而多表视图如果实现可更新视图,则可以大大提高编码的效率。

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 主键,如果多表可更新视图中,包括外联

t1.t11=t2.t11(+)>,则必须在FORM中定义主键,包括数据块的主键和数据项的主键属性。否则,FORM将会提示“视图不允许更新”。

4.2.2 SQL,多表视图如果使用Union或Distinct,则前台FORM可能无法实现更新功能。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值