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

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 11:22:37