如何自定义交互式网格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;
点击保存按钮时无任何反应,也未显示提示信息或错误。请问如何实现从交互式网格将数据插入其他表,并解决当前保存无响应的问题?
解决方案
一、排查当前无响应问题
检查IG基础配置
- 确认IG的「编辑类型」设置为「基于表/视图」或「自定义」,若为「只读」模式,保存按钮不会触发任何操作。
- 验证「要更新的列」中,是否包含DML代码里用到的所有字段(如
TESTID、MEAN等),确保这些字段在IG中已正确映射。
校验绑定变量有效性
- 核对
:P0_HOSPITAL_NO、:P88_SAMPLEDATE等页面项是否存在、有权限访问,且值符合目标表字段要求(如非空字段不能为空)。可通过APEX调试模式查看变量实际值。 - 确认
:ID_NO是页面上存在的项,且数据类型与HAJJ_QC_RESULTS.ID_NO完全匹配,否则returning语句会静默失败。
- 核对
启用错误捕获与调试
- 打开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;
排查动态动作干扰
- 临时禁用过滤用的动态动作,测试保存是否正常,逐步确认是否是动态动作修改了IG数据结构或禁用了保存触发事件。
二、正确实现IG数据插入其他表的步骤
配置IG为自定义DML模式
- 在IG属性设置中,将「编辑类型」改为「自定义」,关联你编写的DML流程。此时IG会调用自定义PL/SQL代码处理保存,而非默认对源表的操作。
确保DML代码覆盖必要行状态
- 若仅需处理新增(
'C'状态),当前代码可满足需求;若后续需支持更新/删除,需补充when 'U'、when 'D'分支逻辑。
- 若仅需处理新增(
验证目标表约束
- 检查
HAJJ_QC_RESULTS表的主键、外键、非空等约束,确保插入的数据满足所有规则,比如HOSPITAL_NO是否允许为空、TESTID是否有对应的外键关联等。
- 检查
先做单条数据测试
- 在SQL Workshop中手动执行插入语句,用实际页面值替换绑定变量,验证SQL本身是否能正常插入数据,排除语法或数据逻辑问题。
内容的提问来源于stack exchange,提问作者Ziad Adnan
相关产品推荐
相关产品推荐

