我搜索了所有论坛,但没有找到任何线索。
我有一个多线程使用的临时表。
为了避免死锁,我正在使用类似以下的方法:
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行。
就像是:
我知道发生这种情况是因为它们的行号相同,但是表有成千上万的行。我真正需要的是线程在每一步都获得10,000行解锁。
我尝试仅使用FETCH FIRST 10000 ROWS,但收到以下消息:
ORA-02014:无法从具有DISTINCT,GROUP BY等的 View 中选择FOR UPDATE。
大家能帮我吗?
谢谢你的好意
最佳答案
Ask Tom有一个像这样的suggestion
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;
关于sql - 在oracle 12c上用ROWNUM锁定的更新跳过,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/52121693/