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

Oracle Apex网格验证遇单条错误仍提交,如何阻止并保留行内提示?

解决Oracle Apex网格验证失败仍提交的问题

1. 修正行内验证代码的语法错误

你当前的验证代码存在逻辑和语法问题,首先需要调整为正确的PL/SQL逻辑:

IF :EMP_SAL < 10000 THEN
    RETURN :EMP_NAME || ' 的薪资低于10000';
END IF;

注意点:

  • 引用网格列需要加冒号:EMP_SAL、:EMP_NAME,这是Apex中绑定变量的标准写法
  • 去掉无意义的LOOP语句,行内验证会自动遍历所有行执行
  • 先拼接错误信息再返回,原代码的赋值和返回顺序颠倒

2. 配置网格验证阻止提交的核心设置

要实现“只要有一行验证失败就阻止提交”,关键是开启网格的专属设置:

  • 编辑你的交互式网格组件
  • 在属性面板中找到验证分类
  • 勾选验证失败时阻止提交(Prevent Submit on Validation Failure)选项
  • 确认行内验证设置为“启用”,且触发时机选择你的提交按钮(When Button Pressed)

3. 备选方案:添加页面级验证兜底

如果上述网格设置不生效,可添加一个页面级验证来兜底检查:

  1. 在页面的“验证”区域新建一个PL/SQL验证
  2. 设置触发时机为你的提交按钮
  3. 输入以下验证代码(注意替换G_F01为你网格中EMP_SAL对应的F列编号,可在网格的“列”属性中查看):
DECLARE
    l_has_error BOOLEAN := FALSE;
BEGIN
    FOR idx IN 1..APEX_APPLICATION.G_F01.COUNT LOOP
        IF TO_NUMBER(APEX_APPLICATION.G_F01(idx)) < 10000 THEN
            l_has_error := TRUE;
            EXIT;
        END IF;
    END LOOP;
    
    IF l_has_error THEN
        APEX_ERROR.ADD_ERROR(
            p_message => '存在薪资不满足要求的员工,无法提交',
            p_display_location => APEX_ERROR.C_DISPLAY_LOCATION_INLINE_IN_NOTIFICATION
        );
    END IF;
END;

这个验证会遍历所有提交的行,只要发现错误就抛出页面级错误,彻底阻止提交,同时行内的错误提示依然会保留。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 18:05:12