0

可以在 T-SQL 中使用公用表表达式来变魔术,但是在 DB2 9.7 中如何做到这一点呢?

1. select the first row in a table
2. Update that specific row

这两个步骤必须在一个事务中执行。请帮忙 :)

4

2 回答 2

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 上测试

于 2012-11-29T17:17:01.383 回答
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 语句时创建意图更新锁,然后在更新语句中转换为排他锁。这使得一旦选择完成,没有其他事务可以修改该行。

于 2012-11-28T09:34:21.950 回答