y
from new table(
update empk include(old_salary decimal(9,2))
set salary=salary*1.1,
old_salary=salary
where empno='200330')
EMPNO NEW_SALARY OLD_SALARY
------ ----------- -----------
200330 46688.40 42444.00
1 条记录已选择。
表中的数据也是如此:
db2 => select * from empk where empno='200330'
EMPNO ENAME SALARY
------ --------------- -----------
200330 WONG 46688.40
1 条记录已选择。
4、Final Table
final table“存储”数据修改操作、引用完整性操作和触发器操作之后的数据,
它可以用来检查在执行insert,update或者delete的时候,
被操作的数据是否存在触发器或者引用约束,此时final table关键词会导致这些操作停止。
如下面这个例子中,我们创建一个触发器,给新增员工增加10%的工资。
create trigger trig_empk
after insert on empk
referencing new as n
for each row
mode db2sql
update empk set salary=n.salary*1.1
where empno=n.empno
在执行下面语句的时候,我们就知道了,final table可以有效的避免这种隐藏的数据更改的操作。
select * from final table(insert into empk(empno,ename,salary) values('120821','ChenLinBo',50000))
★SQL0989N AFTER 触发器 "TRIG_EMPK" 尝试了修改表 "EMPK" 中由 FROM 子句内的 SQL数据更改语句修改的行。
SQLSTATE=560C3
db2 => select count(*) from empk where empno='120821'
1
-----------
0
1 条记录已选择。
添加数据时候,使用new table查看新的值,这个值是未经过任何触发器或者约束修改过的。
db2 => select * from new table(insert into empk values('120821','ChenLinBo',50000))
EMPNO ENAME SALARY
------ --------------- -----------
120821 ChenLinBo 50000.00 --★
1 条记录已选择。
db2 => select * from empk where empno='120821'
EMPNO ENAME SALARY
------ --------------- -----------
120821 ChenLinBo 55000.00 --★
1 条记录已选择。
5、Final Table和New Table的区别★
他们都同样的返回update或insert的中间结果数据,但是Final Table能确保对目标表的update和insert操作,
没有触发器或者应用完整性约束的后续数据修改,如上面这个例子。
来源 http://blog.csdn.net/bobo12082119/article/details/8775600