Apex 5.0.2表格表单多行更新触发ORA-01403错误求助
问题描述
在Apex 5.0.2中创建应用及表格表单,更新表格时,单行数据可正常更新,但多行时触发ORA-01403: no data found(第2行)错误。
关键调试信息
- 异常触发于
ApplyMRU流程(类型:NATIVE_TABFORM_UPDATE) - 错误栈指向
APEX_050000.WWV_FLOW_ITEM的2802行 - 已尝试操作:创建新表格、将行标识符从
rowid改为rn,问题依旧
可能的解决方案
1. 确认行标识符配置正确性
表格表单的多行更新(MRU)依赖唯一标识符定位目标行,需确保:
- 表格主键列已设为表单的行标识符,且该列在表单中为隐藏只读状态
- 若使用自定义列(如
rn)作为标识符,需保证其在查询结果中唯一且稳定(基于主键生成的行号,而非动态无意义序号)
2. 校验表单源查询
检查表格表单的源查询是否存在导致行冲突的情况:
- 避免查询返回重复行,必要时添加
DISTINCT关键字 - 若使用多表连接,确认关联条件正确,不会生成重复的主键/标识符值
3. 排查会话状态传递问题
多行更新时,Apex需正确传递每行的标识符和字段值到会话状态:
- 确认表单所有列与表列映射正确,无遗漏或错误映射
- 通过Apex调试模式查看提交时的会话状态日志,验证第2行的标识符值是否正确传递
4. 处理版本特定Bug
Apex 5.0.2属于较旧版本,WWV_FLOW_ITEM包相关错误可能是已知Bug导致:
- 优先升级到Apex 5.0.x系列的最新补丁版本,官方已修复多个MRU相关问题
- 若无法升级,替换原生
NATIVE_TABFORM_UPDATE流程为自定义PL/SQL逻辑,手动处理多行更新:
DECLARE CURSOR c_update_rows IS SELECT rowid, col1, col2 FROM your_table WHERE rowid IN (SELECT column_value FROM apex_string.split(:P_PAGE_ROWIDS, ',')); BEGIN FOR r_row IN c_update_rows LOOP UPDATE your_table SET col1 = r_row.col1, col2 = r_row.col2 WHERE rowid = r_row.rowid; END LOOP; END;
(需创建页面项P_PAGE_ROWIDS,在表单每行添加隐藏项存储rowid,提交时拼接所有行的rowid到该项)
5. 验证数据一致性
确认提交时第2行数据仍存在于数据库中:
- 在更新流程前添加验证逻辑,检查目标行是否存在
- 排除并发操作导致的行删除/修改情况
内容的提问来源于stack exchange,提问作者Rustam Hafizov
相关产品推荐
相关产品推荐

