可以使用公共表表达式在T-SQL中做出魔术,但是如何在DB2 9.7中完成呢?
1. select the first row in a table
2. Update that specific row
这两个步骤必须在一个事务中执行。请帮助:)
答案 0 :(得分:3)
不需要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上测试
答案 1 :(得分:1)
当您在游标上进行迭代时,可以在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中检索到的第一行。
这将在发出select语句时创建一个intent update锁,然后它将转换为update语句中的独占锁。这使得一旦select完成就没有其他事务可以修改行。