可以在 T-SQL 中使用公用表表达式来变魔术,但是在 DB2 9.7 中如何做到这一点呢?
1. select the first row in a table
2. Update that specific row
这两个步骤必须在一个事务中执行。请帮忙 :)
不需要 CTE,也不需要游标!只需定义将该行作为全选返回的查询,然后对其运行更新:
UPDATE (
SELECT *
FROM schema.table
WHERE thing1 = 'blah'
AND thing2 = 'something'
ORDER BY key
FETCH FIRST ROW ONLY
)
SET thing3 = 'updated'
在 DB2 Linux/Unix/Windows 9.7 上测试
当您在游标上迭代时,您可以在 DB2 中使用类似的东西。
这是一个例子:
begin
declare at_end sqlstate;
declare name anchor emp.name;
declare continue handler for not found
set at_end = TRUE;
declare c cursor for
select tabname from emp
for update;
open c;
fetch c into name;
if at_end <> TRUE then
update emp
set name = 'foo'
where current of c;
end if;
end@
此代码将仅更新从选择中检索到的第一行。
这将在发出 select 语句时创建意图更新锁,然后在更新语句中转换为排他锁。这使得一旦选择完成,没有其他事务可以修改该行。