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

Oracle HMIS应用中自创计数器方案的锁定问题

ASKTOM 2020-10-19
186

问题描述

亲爱的团队
由于我们需要为不同的医院校园生成单独的计数器,我们最近将我们的应用计数器方案 (以前使用oracle序列) 升级到我们自己创建的过程以生成下一个数字/计数器。每年我们都必须重置所有序列,因为我们的方案使用的是基于年份的计数器值。

现在的问题是我们的医生遇到的锁定问题,我们必须同时生成7-8个不同的计数器,我们的程序有时会被锁定,并且由于锁定问题而不会返回任何计数器值

我们的应用程序用户可能会丢失数据以无计数器返回

我们有两个行更新选项,等待1秒和Nowait,下面提到示例代码。您能否指导我们接近Oracle序列的方法,以便我们更新代码并克服此锁定问题。另外,请指导您是否建议在SQL中使用 “不等待” 或 “NOWAIT” 选项进行更新?

    IF NVL(P_LOCK_WAIT, 'N') = 'Y' THEN
      SELECT ROWID
        INTO P_ROWID
        FROM COUNTERS.SYSTEM_COUNTERS_VALUES T
       WHERE T.COUNTER_ID = P_COUNTER_ID
         AND T.SERIAL_NO = P_SERIAL_NO
         FOR UPDATE WAIT 1;
    ELSE
      SELECT ROWID
        INTO P_ROWID
        FROM COUNTERS.SYSTEM_COUNTERS_VALUES T
       WHERE T.COUNTER_ID = P_COUNTER_ID
         AND T.SERIAL_NO = P_SERIAL_NO
         FOR UPDATE NOWAIT;
    END IF

复制

专家解答

你有多少个不同的校园?

你能不能每个校园都有一个序列?是的,您可能需要一点动态SQL来获得正确的序列值,但这似乎是一个更容易实现的解决方案
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论