如何在IBM DB2 9.7中选择第一行并进行更新

时间:2012-11-28 08:07:56

标签: sql db2

可以使用公共表表达式在T-SQL中做出魔术,但是如何在DB2 9.7中完成呢?

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

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

2 个答案:

答案 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完成就没有其他事务可以修改行。