下面我们看一个简单视图的更新,表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) |