我想編寫一個查詢,它只更新表中的一行,然後返回更新的行。如何正確更新一條記錄並在單個db2查詢中選擇更新的行
我可以得到實現使用
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被_defined_在** sets **中效果最好,這意味着它在嘗試更新儘可能多的行時效果最佳。你想在這裏完成什麼?請注意,如果您試圖獲得某種消息隊列,那麼數據庫實際上將成爲速度的瓶頸;你最好用一個實際的'消息隊列'類型的程序(其中許多具有彈性功能,在多線程之上)...... –