暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 对于用ROWNUM锁定的更新跳过

askTom 2018-08-31
490

问题描述

伙计们,
我搜索了所有论坛,但没有找到任何线索。
我在表中有一个阶段,多个线程消耗它。
为了避免死锁,我使用这样的东西:

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前10000行,但收到以下消息:
ORA-02014: 无法从具有DISTINCT、GROUP BY等的视图中选择更新。

你们能帮我吗?
谢谢你的那种。

专家解答

在这里看看 “为什么” 以及如何解决它

https://asktom.oracle.com/pls/apex/asktom.search?tag=select-for-update-skip-locked


「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论