簡體   English   中英

用於在Oracle 12c上用ROWNUM鎖定的更新跳過

[英]FOR UPDATE SKIP LOCKED with ROWNUM on ORACLE 12c

我搜索了所有論壇,但沒有找到任何線索。 我有一個多線程消耗的臨時表。 為了避免死鎖,我使用了以下方法:

SELECT ID_MESSAGE
FROM TB_STAGE_IN S 
WHERE S.CD_STATUS = 0 
AND S.ID_JOB_SCHEDULE IS NULL 
AND ROWNUM <= 10000 
FOR UPDATE SKIP LOCKED; 

它工作正常,但線程最多不能達到10,000行。 就像是:

  • 線程1:5000
  • 線程2:3000
  • 線程2:2000

我知道發生這種情況是因為它們的行號相同,但是表有成千上萬的行。 我真正需要的是線程在每一步都獲得10,000行解鎖。

我嘗試僅使用FETCH FIRST 10000 ROWS,但收到以下消息:ORA-02014:無法從DISTINCT,GROUP BY等視圖中選擇FOR UPDATE。

大家能幫我嗎?

謝謝你的好意

Ask Tom有這樣的建議

open C;  -- cursor C is select ... for update skip locked;

loop
  fetch C bulk collect into :my_array limit 100;
  append :my_array to :to_be_processed_array;
  exit when c%notfound or :to_be_processed_array.count >= 10000;
end loop;

-- process any rows in :to_be_processed_array

close C;

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM