You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让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(:变量, 字段原值)确保赋值有效,避免字段非空约束报错。
  • 语法错误:检查代码中的标点符号,比如原代码中的&lt;=需替换为实际SQL语法的<=。

逻辑说明

当主管未修改行数据时,:TEST_RESULT等绑定变量会保留原字段值(或为空),通过NVL(:变量, TEST_RESULT)的写法,更新时会使用字段原有值覆盖,不会改变检测结果,同时完成发布状态(SAMPLE_STATUS=5)、审核人及审核时间的更新,实现无修改发布的需求。

内容的提问来源于stack exchange,提问作者Abdullah

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.06.14 18:13:14