Oracle Apex中基于NameFormat正则验证名称的PLSQL存储过程实现求助
Oracle Apex 表单名称正则匹配验证实现方案
1. 编写PLSQL验证存储过程
先创建一个存储过程,负责根据指定Seq获取对应正则格式,验证输入名称是否匹配,不匹配则抛出明确异常:
CREATE OR REPLACE PROCEDURE VALIDATE_NAME_FORMAT( P_SEQ IN NUMBER, P_INPUT_NAME IN VARCHAR2 ) IS V_NAME_FORMAT VARCHAR2(2000); BEGIN -- 从表中获取当前Seq对应的正则格式 SELECT NameFormat INTO V_NAME_FORMAT FROM YOUR_TABLE_NAME -- 替换为实际表名 WHERE Seq = P_SEQ; -- 执行正则匹配验证 IF NOT REGEXP_LIKE(P_INPUT_NAME, V_NAME_FORMAT) THEN RAISE_APPLICATION_ERROR(-20001, '名称格式不符合要求,请检查!'); END IF; EXCEPTION WHEN NO_DATA_FOUND THEN RAISE_APPLICATION_ERROR(-20002, '未找到对应Seq的记录'); END; /
注意:Oracle的
REGEXP_LIKE使用POSIX正则语法,若需完全匹配(而非包含匹配),要在NameFormat的正则前后加上^和$,比如^A.*$表示必须以A开头的完整字符串。
2. 在Apex表单中配置验证触发逻辑
单条记录表单场景
- 打开表单页面的设计界面,找到处理区域,添加一个PLSQL代码类型的处理
- 设置处理的执行时机为提交前(Before Submit),确保在更新数据前完成验证
- 输入执行代码,传入表单页面的项值(替换为你实际的页面项名称):
VALIDATE_NAME_FORMAT(:P1_SEQ, :P1_NAME);
多行表格表单场景
如果是批量编辑的表格表单,需要循环验证每一行:
FOR rec IN (SELECT Seq, Name FROM APEX_APPLICATION_G_F01) LOOP -- 集合名称根据实际页面项调整 VALIDATE_NAME_FORMAT(rec.Seq, rec.Name); END LOOP;
3. 错误提示配置
Apex会自动捕获存储过程抛出的RAISE_APPLICATION_ERROR异常,并在页面默认的错误区域显示提示信息。你可以在页面的错误处理区域,调整错误显示的位置(如页面顶部通知栏),确保用户能直观看到验证失败原因。
内容的提问来源于stack exchange,提问作者Velocity
相关产品推荐
相关产品推荐

