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

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表单中配置验证触发逻辑

单条记录表单场景

  1. 打开表单页面的设计界面,找到处理区域,添加一个PLSQL代码类型的处理
  2. 设置处理的执行时机为提交前(Before Submit),确保在更新数据前完成验证
  3. 输入执行代码,传入表单页面的项值(替换为你实际的页面项名称):
    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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.30 09:13:16