问题描述
我有一个包装规格和主体,如下所示,用于在APEX应用程序中生成一个以某些值和年份为前缀的自动递增数字,如下所示
但是问题是此功能仅适用于 “wp”,而不适用于 “infl' 或其他任何其他值。
我为选择列表 (项目类型字段) 创建了一个动态操作,在选择时更改APEX应用程序中的文本值字段 (项目编号),但这似乎只适用于 'WP',而不是其他项目类型。我正在使用sql语句在动态操作中设置值,例如从DUAL中选择pkg_wi_business_rules.GetMaxProjectNumber('INFL');
从DUAL中选择PKG_WI_BUSINESS_RULES.GETMAXPROJECTNUMBER('WP');
即使在数据库中,该值也仅为 “wp” 值递增。请帮忙
CREATE OR REPLACE PACKAGE GISWTR.PKG_WI_BUSINESS_RULES IS C_PROJECT_PREFIX_PD CONSTANT VARCHAR2(4) := 'WP' ; C_SHORT_DATE_FORMAT CONSTANT VARCHAR2(10) := 'YYYY/MM/DD'; FUNCTION GetMaxProjectNumber (v_ProjectType VARCHAR2 := C_PROJECT_PREFIX_PD, v_year VARCHAR2 DEFAULT to_char(SYSDATE, 'RR')) RETURN VARCHAR2; CREATE OR REPLACE PACKAGE BODY GISWTR.PKG_WI_BUSINESS_RULES IS /************************************************************************************************** ------------------------------------- -- START of Functions and Procedures ------------------------------------- /**************************************************************************************************GetMaxProjectNumber Finds the maximum project number and add 1 then, prefix it with the project Type, 2-digit year. Example: WP-13001 (001 is the project number sequence). Concurrent users can potentially come up with the same sequence but this is Technical Design ------------------ --------- ----------------------------------------- *************************************************************************************************/ C_COL_SEP CONSTANT CHAR(1) := '~'; C_ROW_START CONSTANT CHAR(1) := '{'; C_ROW_END CONSTANT CHAR(1) := '}'; C_ROW_SEP CONSTANT CHAR(2) := '}{'; FUNCTION GetMaxProjectNumber (v_ProjectType VARCHAR2 := C_PROJECT_PREFIX_PD, v_year VARCHAR2 DEFAULT to_char(SYSDATE, 'RR')) RETURN VARCHAR2 IS CURSOR c_get_max_project IS select max(to_number(substr(pj_seq, 1, 3))) from (select --get the project 3-digit sequence, remove the non-numeric characters regexp_replace(substr(project_number, 6, 5), '[^0-9]') pj_seq from projects where substr(project_number, 1, 3) = v_projecttype||'-' and to_char(substr(project_number, 4, 2)) = v_year ); v_projectnumber projects.project_number%TYPE; v_project_sequence INTEGER; BEGIN OPEN c_get_max_project; FETCH c_get_max_project INTO v_project_sequence; CLOSE c_get_max_project; v_project_sequence := NVL(v_project_sequence, 0) + 1; v_projectnumber := v_ProjectType || '-' || v_year || LPAD(v_project_sequence, 3, '0'); RETURN v_projectnumber; END GetMaxProjectNumber; 复制
但是问题是此功能仅适用于 “wp”,而不适用于 “infl' 或其他任何其他值。
我为选择列表 (项目类型字段) 创建了一个动态操作,在选择时更改APEX应用程序中的文本值字段 (项目编号),但这似乎只适用于 'WP',而不是其他项目类型。我正在使用sql语句在动态操作中设置值,例如从DUAL中选择pkg_wi_business_rules.GetMaxProjectNumber('INFL');
从DUAL中选择PKG_WI_BUSINESS_RULES.GETMAXPROJECTNUMBER('WP');
即使在数据库中,该值也仅为 “wp” 值递增。请帮忙
专家解答
在你走得更远之前... 这种方法行不通。
当 * 两个人做的时候:
从我的表中选择最大 (值) 1
然后它们将 * 两者 * 得到相同的结果,因此获取唯一标识符的概念将失败。
唯一的解决方法是锁定整个表... 最终使您的应用程序成为一次单一用户应用程序。
使用序列,问题就消失了。
当 * 两个人做的时候:
从我的表中选择最大 (值) 1
然后它们将 * 两者 * 得到相同的结果,因此获取唯一标识符的概念将失败。
唯一的解决方法是锁定整个表... 最终使您的应用程序成为一次单一用户应用程序。
使用序列,问题就消失了。
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。
评论
相关阅读
【纯干货】Oracle 19C RU 19.27 发布,如何快速升级和安装?
Lucifer三思而后行
645次阅读
2025-04-18 14:18:38
Oracle RAC 一键安装翻车?手把手教你如何排错!
Lucifer三思而后行
624次阅读
2025-04-15 17:24:06
Oracle数据库一键巡检并生成HTML结果,免费脚本速来下载!
陈举超
523次阅读
2025-04-20 10:07:02
XTTS跨版本迁移升级方案(11g to 19c RAC for Linux)
zwtian
520次阅读
2025-04-08 09:12:48
【ORACLE】记录一些ORACLE的merge into语句的BUG
DarkAthena
479次阅读
2025-04-22 00:20:37
【活动】分享你的压箱底干货文档,三篇解锁进阶奖励!
墨天轮编辑部
457次阅读
2025-04-17 17:02:24
Oracle 19c RAC更换IP实战,运维必看!
szrsu
455次阅读
2025-04-08 23:57:08
一页概览:Oracle GoldenGate
甲骨文云技术
454次阅读
2025-04-30 12:17:56
【ORACLE】你以为的真的是你以为的么?--ORA-38104: Columns referenced in the ON Clause cannot be updated
DarkAthena
449次阅读
2025-04-22 00:13:51
火焰图--分析复杂SQL执行计划的利器
听见风的声音
400次阅读
2025-04-17 09:30:30