Chinaunix首页 | 论坛 | 博客
  • 博客访问: 721420
  • 博文数量: 94
  • 博客积分: 1937
  • 博客等级: 上尉
  • 技术积分: 1618
  • 用 户 组: 普通用户
  • 注册时间: 2010-11-04 18:46
个人简介

专注数据库开发管理

文章分类

全部博文(94)

文章存档

2015年(1)

2014年(2)

2013年(19)

2012年(32)

2011年(10)

2010年(30)

分类: Oracle

2012-11-29 11:37:53

下面我们看一个简单视图的更新,表K的结构如下:

SQL> desc k
Name Type    Nullable Default Comments 
---- ------- -------- ------- -------- 
UID  INTEGER Y                         

视图vw_k的两个字段名都指向k表的UID。

SQL> CREATE OR REPLACE VIEW vw_k
  2  AS
  3  SELECT "UID" u1 ,"UID" u2 FROM k;
 
View created

SQL> SELECT * FROM vw_k;
 
                                     U1                                      U2
--------------------------------------- ---------------------------------------
                                      1                                       1
                                      2                                       2
                                      5                                       5
 
 
如果同时更新这两字段会怎样呢?报错?只更新一个字段?还是先后更新两次?
先建一张临时表j和一个触发器,当K被更新时j表记录需更新的新值。
 
SQL> CREATE TABLE j(ID int);
 
Table created
SQL> CREATE OR REPLACE TRIGGER tr_k
  2  BEFORE UPDATE ON k
  3  FOR EACH ROW
  4  BEGIN
  5   INSERT INTO j VALUES(:New.uid);
  6  END tr_k;
 
  7  /
 
Trigger created
 
如果被更新多次,J表会记录所有更新后的值,实验结果如下:
 
SQL> update vw_k set u1=100,u2=200 where u1=2;
 
1 row updated
 
SQL> select * from j;
 
                                     ID
---------------------------------------
                                    200
经反复试验,我们发现oracle省略了前一个字段的更新,只更新了后面的一个值。
阅读(690) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~