gpt4 book ai didi

sql - 在oracle 12c上用ROWNUM锁定的更新跳过

转载 作者:行者123 更新时间:2023-12-03 13:08:03 26 4
gpt4 key购买 nike

我搜索了所有论坛,但没有找到任何线索。
我有一个多线程使用的临时表。
为了避免死锁,我正在使用类似以下的方法:

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等的 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/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com