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

Oracle Apex如何为Continue按钮添加PL/SQL服务端验证条件

问题描述

在Oracle Apex页面的交互式网格(IG)中设置了独立的Continue按钮,点击该按钮会弹出确认提示并提交页面,此按钮通过动态动作(Dynamic Action)定义,满足条件时执行JS代码显示确认消息。

现在需为该按钮添加验证条件,仅当条件满足时才允许继续执行。期望的服务端PL/SQL条件逻辑如下:

Declare
empcode NUMBER(20);
prom_emp_code NUMBER(20);
Begin
Select emp_code into empcode from employees where emp_id = :P1_EMPID;
Select p_emp_code into prom_emp_code from promoted_employees where emp_id = :P1_EMPID;
IF empcode !=p_emp_code
THEN
DBMS_OUTPUT_PUT_LINE('The employee code needs to be validated before proceeding');
END IF;
END;

但将这段代码放入「服务端条件->表达式->PL/SQL」时出现错误。请问如何调整该逻辑为可运行的PL/SQL表达式,使得当empcode与p_emp_code不相等时终止执行并提示指定消息,否则继续执行动态动作的JS确认逻辑?

解决方案

1. 改用页面验证实现逻辑(替换服务端条件)

Apex的「服务端条件」仅用于判断是否触发动态动作,无法直接抛出前端提示消息。要实现“不满足条件时终止流程并显示提示”,必须使用页面验证,修正后的PL/SQL代码如下:

DECLARE
    empcode NUMBER(20);
    prom_emp_code NUMBER(20);
BEGIN
    SELECT emp_code INTO empcode 
    FROM employees 
    WHERE emp_id = :P1_EMPID;

    SELECT p_emp_code INTO prom_emp_code 
    FROM promoted_employees 
    WHERE emp_id = :P1_EMPID;

    IF empcode != prom_emp_code THEN
        -- 抛出自定义错误,Apex会自动在前端显示该消息
        RAISE_APPLICATION_ERROR(-20001, 'The employee code needs to be validated before proceeding');
    END IF;
END;

2. 配置页面验证步骤

  • 进入Apex页面编辑界面,切换到「验证」选项卡,点击「创建」
  • 选择「PL/SQL验证」,设置验证名称(例如EMP_CODE_VALIDATION)
  • 将上述修正后的代码粘贴到「验证代码」区域
  • 在「验证条件」中选择「按钮被按下」,指定为你的Continue按钮
  • 保存验证配置

3. 动态动作的调整

  • 保留原有动态动作的JS确认逻辑,无需再设置服务端条件
  • 当用户点击Continue按钮时,Apex会优先执行页面验证:
    • 验证通过(编码一致):继续执行动态动作的JS确认提示,完成后提交页面
    • 验证失败(编码不一致):直接弹出自定义错误消息,终止后续流程

关键说明

  • 原代码中的DBMS_OUTPUT.PUT_LINE在Apex环境无效,Apex不会捕获DBMS输出,必须使用RAISE_APPLICATION_ERROR抛出自定义错误才能在前端显示提示
  • 服务端条件无法实现“终止流程并提示”的需求,仅能控制动态动作是否触发,因此必须用页面验证来完成业务校验

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.22 10:05:18