如何让Interactive Grid无修改时执行选中行的RELEASE按钮代码
实验室系统发布流程问题解决
问题背景
实验室系统流程为:实验技术员录入检测结果并保存后,由实验室主管审核结果并发布。主管有时无需修改检测结果,仅确认正确后选中全部或部分行,点击RELEASE按钮即可完成发布。但当前按钮代码仅在行数据有修改(:APEX$ROW_STATUS = 'U')时执行更新操作,移除CASE语句后出现ORA-06550错误,已将流程执行范围设为「All submitted rows」,需实现无修改时也能执行选中行的更新逻辑。
当前RELEASE按钮使用的原代码:
BEGIN CASE :APEX$ROW_STATUS WHEN 'U' THEN UPDATE LAB_RESULTS SET SAMPLE_STATUS = 5 , APPROVED_BY = :APP_USER , APPROVED_DATE = sysdate , TEST_RESULT = :TEST_RESULT , MACHINE_ID = :MACHINE_ID , RANGE_FROM = :RANGE_FROM , RANGE_TO = :RANGE_TO WHERE TEST_NO IN (SELECT REGEXP_SUBSTR(:P69_TEST_NO, '[^,]+', 1, LEVEL) AS TESTNO FROM DUAL CONNECT BY LEVEL <= REGEXP_COUNT(:P69_TEST_NO, ',') + 1) AND ID = :ID; END CASE; END;
解决方法
1. 调整更新代码,移除CASE判断
直接去掉CASE分支,同时处理无修改时绑定变量的传递问题,避免空值赋值导致的错误。修改后的代码如下:
BEGIN UPDATE LAB_RESULTS SET SAMPLE_STATUS = 5, APPROVED_BY = :APP_USER, APPROVED_DATE = SYSDATE, -- 无修改时用字段原值填充,避免空值覆盖 TEST_RESULT = NVL(:TEST_RESULT, TEST_RESULT), MACHINE_ID = NVL(:MACHINE_ID, MACHINE_ID), RANGE_FROM = NVL(:RANGE_FROM, RANGE_FROM), RANGE_TO = NVL(:RANGE_TO, RANGE_TO) WHERE ID = :ID; END;
2. 确认流程与按钮配置
- 保持流程的执行范围为「All submitted rows」,确保所有选中行都会触发更新逻辑,无论是否修改。
- 检查RELEASE按钮的提交属性,确认它能正确将选中行的数据提交至服务器。
3. 排查ORA-06550错误
移除CASE后出现该错误的常见原因及处理:
- 绑定变量传递异常:无修改时部分变量可能为空,用
NVL(:变量, 字段原值)确保赋值有效,避免字段非空约束报错。 - 语法错误:检查代码中的标点符号,比如原代码中的
<=需替换为实际SQL语法的<=。
逻辑说明
当主管未修改行数据时,:TEST_RESULT等绑定变量会保留原字段值(或为空),通过NVL(:变量, TEST_RESULT)的写法,更新时会使用字段原有值覆盖,不会改变检测结果,同时完成发布状态(SAMPLE_STATUS=5)、审核人及审核时间的更新,实现无修改发布的需求。
内容的提问来源于stack exchange,提问作者Abdullah
相关产品推荐
相关产品推荐

