【发布时间】:2013-09-27 21:58:27
【问题描述】:
我想编写一个查询,它只更新表的一行,然后返回更新的行。
我可以使用
实现获取返回的行select field from final table
(update tablename set anotherfield = 'dd' where someanotherfield = 'bb')
一种说法。但我不能只更新一行。
另外,我调用这个查询的程序是一个多线程的,我不想死锁任何进程,所以我发现了 SKIP LOCKED DATA 语句,它类似于 t-sql 查询中的 readpast。
所以我想要做的是,我的程序使用一个像堆栈一样的 db2 表,每次只选择一行,更新它,这样任何其他线程都无法访问它,但不会让他们等待 整个表,他们只是跳过更新的行并从表中选择下一条记录。是否可以在单个 db2 查询中执行此操作?
这个查询我写到现在,无法处理
select COLUMN3 FROM FINAL TABLE
(
update MYTABLE
set COLUMN1 = 'R'
where COLUMN1 = ''
order by COLUMN2
FETCH FIRST 1 ROW ONLY
SKIP LOCKED DATA
)
任何帮助将不胜感激, 谢谢。
【问题讨论】:
-
#winces# SQL 定义在 sets 中工作得最好,这意味着它在尝试更新尽可能多的行时工作得最好.你想在这里完成什么?请注意,如果您正在尝试获取某种消息队列,那么数据库实际上将成为速度的瓶颈;你最好使用一个实际的“消息队列”类型的程序(其中许多还具有弹性特性,在多线程之上)....