问题描述
亲爱的团队
由于我们需要为不同的医院校园生成单独的计数器,我们最近将我们的应用计数器方案 (以前使用oracle序列) 升级到我们自己创建的过程以生成下一个数字/计数器。每年我们都必须重置所有序列,因为我们的方案使用的是基于年份的计数器值。
现在的问题是我们的医生遇到的锁定问题,我们必须同时生成7-8个不同的计数器,我们的程序有时会被锁定,并且由于锁定问题而不会返回任何计数器值
我们的应用程序用户可能会丢失数据以无计数器返回
我们有两个行更新选项,等待1秒和Nowait,下面提到示例代码。您能否指导我们接近Oracle序列的方法,以便我们更新代码并克服此锁定问题。另外,请指导您是否建议在SQL中使用 “不等待” 或 “NOWAIT” 选项进行更新?
由于我们需要为不同的医院校园生成单独的计数器,我们最近将我们的应用计数器方案 (以前使用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来获得正确的序列值,但这似乎是一个更容易实现的解决方案
你能不能每个校园都有一个序列?是的,您可能需要一点动态SQL来获得正确的序列值,但这似乎是一个更容易实现的解决方案
文章转载自ASKTOM,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【专家有话说第五期】在不同年龄段,DBA应该怎样规划自己的职业发展?
墨天轮编辑部
1322次阅读
2025-03-13 11:40:53
Oracle RAC ASM 磁盘组满了,无法扩容怎么在线处理?
Lucifer三思而后行
792次阅读
2025-03-17 11:33:53
Oracle+Deepseek+Dify 实现数据库数据实时分析
bicewow
724次阅读
2025-03-06 09:41:49
Oracle避坑指南|同名表导出难题:如何精准排除指定用户下的表?
szrsu
558次阅读
2025-03-05 00:42:34
2月“墨力原创作者计划”获奖名单公布
墨天轮编辑部
465次阅读
2025-03-13 14:38:19
Oracle 如何修改 db_unique_name?强迫症福音!
Lucifer三思而后行
356次阅读
2025-03-12 21:27:56
Oracle DataGuard高可用性解决方案详解
孙莹
314次阅读
2025-03-26 23:27:33
Oracle分区和执行计划相关的几个问题
听见风的声音
308次阅读
2025-03-07 08:51:42
数据库管理-第299期 数据库是否需要定期重启(20250306)
胖头鱼的鱼缸
250次阅读
2025-03-06 09:09:35
切换Oracle归档路径后,不能正常删除原归档路径上的归档文件
dbaking
247次阅读
2025-03-19 14:41:51