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
相关产品推荐
相关产品推荐

