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

如何自定义交互式网格DML流程并将所有行保存至其他表?(保存无响应)

问题

我有一个交互式网格(IG),通过以下SQL查询展示数据:

select  ID , 
        TESTID,
        MACHINE_ID,
        PROGRAM_ID,
        SAMPLE_ID,
        MEAN,
        SD,
        LOW_LIMIT,
        HIGH_LIMIT,
        TESTUNIT
        FROM HAJJ_SAMPLE_DETAILS 
        where sample_id = :P88_SAMPLE
        and program_id = :P88_PROGRAM
        and machine_id = :P88_MACHINE

我使用动态动作对数据进行过滤。之后需要将数据插入数据库中的另一张表,已将DML流程更新为如下代码:

begin
    case :APEX$ROW_STATUS
    when 'C' then
       INSERT INTO HAJJ_QC_RESULTS (HOSPITAL_NO,TESTID, APPROVED_DATE,
        MACHINE_ID, PROGRAM_ID, SAMPLE_ID, MEAN,SD, LOW_LIMIT, HIGH_LIMIT,
       UNITID) 
VALUES (:P0_HOSPITAL_NO, :TESTID , :P88_SAMPLEDATE, :MACHINE_ID , :PROGRAM_ID ,:SAMPLE_ID ,
         :MEAN , :SD , :LOW_LIMIT , :HIGH_LIMIT , :TESTUNIT )
        returning ID_NO into :ID_NO;
  
    end case;
end;

点击保存按钮时无任何反应,也未显示提示信息或错误。请问如何实现从交互式网格将数据插入其他表,并解决当前保存无响应的问题?

解决方案

一、排查当前无响应问题

  1. 检查IG基础配置

    • 确认IG的「编辑类型」设置为「基于表/视图」或「自定义」,若为「只读」模式,保存按钮不会触发任何操作。
    • 验证「要更新的列」中,是否包含DML代码里用到的所有字段(如TESTID、MEAN等),确保这些字段在IG中已正确映射。
  2. 校验绑定变量有效性

    • 核对:P0_HOSPITAL_NO、:P88_SAMPLEDATE等页面项是否存在、有权限访问,且值符合目标表字段要求(如非空字段不能为空)。可通过APEX调试模式查看变量实际值。
    • 确认:ID_NO是页面上存在的项,且数据类型与HAJJ_QC_RESULTS.ID_NO完全匹配,否则returning语句会静默失败。
  3. 启用错误捕获与调试

    • 打开APEX调试模式(页面右上角「调试」按钮),点击保存后查看日志,可定位执行过程中的约束违反、类型不匹配等错误。
    • 给DML代码添加异常捕获,手动抛出错误提示:
      begin
          case :APEX$ROW_STATUS
          when 'C' then
             INSERT INTO HAJJ_QC_RESULTS (HOSPITAL_NO,TESTID, APPROVED_DATE,
              MACHINE_ID, PROGRAM_ID, SAMPLE_ID, MEAN,SD, LOW_LIMIT, HIGH_LIMIT,
             UNITID) 
      VALUES (:P0_HOSPITAL_NO, :TESTID , :P88_SAMPLEDATE, :MACHINE_ID , :PROGRAM_ID ,:SAMPLE_ID ,
               :MEAN , :SD , :LOW_LIMIT , :HIGH_LIMIT , :TESTUNIT )
              returning ID_NO into :ID_NO;
          end case;
      exception
          when others then
              raise_application_error(-20001, '保存失败:' || sqlerrm);
      end;
      
      执行保存后若有错误,会弹出明确提示信息。
  4. 排查动态动作干扰

    • 临时禁用过滤用的动态动作,测试保存是否正常,逐步确认是否是动态动作修改了IG数据结构或禁用了保存触发事件。

二、正确实现IG数据插入其他表的步骤

  1. 配置IG为自定义DML模式

    • 在IG属性设置中,将「编辑类型」改为「自定义」,关联你编写的DML流程。此时IG会调用自定义PL/SQL代码处理保存,而非默认对源表的操作。
  2. 确保DML代码覆盖必要行状态

    • 若仅需处理新增('C'状态),当前代码可满足需求;若后续需支持更新/删除,需补充when 'U'、when 'D'分支逻辑。
  3. 验证目标表约束

    • 检查HAJJ_QC_RESULTS表的主键、外键、非空等约束,确保插入的数据满足所有规则,比如HOSPITAL_NO是否允许为空、TESTID是否有对应的外键关联等。
  4. 先做单条数据测试

    • 在SQL Workshop中手动执行插入语句,用实际页面值替换绑定变量,验证SQL本身是否能正常插入数据,排除语法或数据逻辑问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.25 17:13:30