Oracle APEX 22.1批量删除行时数据版本冲突错误咨询
解决Oracle APEX 22.1交互式网格批量删除时的版本冲突错误
针对你遇到的批量删除主明细行时出现的Current version of data in database has changed since user initiated update process.错误,以下是几个可行的调整方案:
方案一:启用APEX的“忽略不存在行”删除设置
这是最直接的解决方案,让APEX跳过那些已经被数据库触发器删除的明细行,不再触发版本检查错误:
- 打开目标页面,编辑交互式网格组件
- 切换到「属性」面板的「高级」标签
- 找到「删除时忽略不存在的行」(Delete Ignore Missing Rows)选项,设置为Yes
- 保存页面后测试批量删除操作,APEX会自动忽略已被触发器删除的明细行,不再抛出冲突错误
方案二:将触发器逻辑迁移到APEX端处理
放弃数据库触发器自动删子行的逻辑,改为由APEX主动处理关联行删除,确保所有操作在APEX的跟踪范围内:
- 先禁用或删除数据库中主表的删除触发器
- 编辑交互式网格的「处理」流程,在默认的删除步骤前添加一个PL/SQL处理:
- 处理类型选择「PL/SQL代码」
- 输入以下代码(替换为你的表名和外键列):
DELETE FROM 子表名称 WHERE 外键列名 = :APEX$ROW_ID; -- 绑定当前主行的ID,若使用自定义主键,替换为对应网格列的绑定变量
- 保存页面后,APEX会先删除所有关联的明细行,再删除主行,全程跟踪操作状态,不会出现行不存在的冲突
方案三:关闭明细行的乐观锁检查(仅适合低并发场景)
如果前两个方案无法适用,可以关闭明细行的乐观锁验证,但会失去并发修改的保护:
- 编辑交互式网格的「列」设置
- 找到用于乐观锁的列(通常是
ROWID或自定义的版本号列),将「乐观锁」属性设置为No - 保存后,APEX删除明细行时不会检查版本变化,即使行已被触发器删除也不会报错
内容的提问来源于stack exchange,提问作者smriti
相关产品推荐
相关产品推荐

