Oracle APEX用户级前端自定义验证方案咨询:复用引擎及表结构设计
用户级Oracle APEX验证规则实现方案
一、用户级验证规则表结构设计
建议设计两张核心表,分别存储验证主信息和层级嵌套的条件明细,满足用户自定义任意层级验证规则的需求:
1. 用户验证主表 (USER_VALIDATIONS)
| 列名 | 数据类型 | 说明 |
|---|---|---|
VALIDATION_ID | NUMBER(10) | 主键,由自增序列生成 |
USER_ID | VARCHAR2(100) | 关联APEX内置用户表APEX_USERS.USER_ID,标记验证归属用户 |
APPLICATION_ID | NUMBER(10) | 关联目标APEX应用ID |
PAGE_ID | NUMBER(10) | 关联目标页面ID,全局验证设为NULL |
ITEM_NAME | VARCHAR2(255) | 关联验证目标项,区域/页面级验证设为NULL |
VALIDATION_NAME | VARCHAR2(255) | 用户自定义验证名称 |
VALIDATION_TYPE | VARCHAR2(50) | 验证类型,对应APEX原生类型(如CONDITION、REGEX、COMPARISON) |
ERROR_MESSAGE | VARCHAR2(1000) | 验证失败提示信息 |
ENABLED_FLAG | VARCHAR2(1) | 启用状态(Y/N) |
CREATED_DATE | DATE | 记录创建时间 |
UPDATED_DATE | DATE | 记录更新时间 |
2. 用户验证条件明细表 (USER_VALIDATION_CONDITIONS)
用于支持多条件的层级嵌套组合,实现任意复杂的逻辑规则:
| 列名 | 数据类型 | 说明 |
|---|---|---|
CONDITION_ID | NUMBER(10) | 主键,由自增序列生成 |
VALIDATION_ID | NUMBER(10) | 外键,关联USER_VALIDATIONS.VALIDATION_ID |
PARENT_CONDITION_ID | NUMBER(10) | 父级条件ID,NULL表示根条件,用于构建嵌套层级 |
LOGICAL_OPERATOR | VARCHAR2(3) | 逻辑运算符(AND/OR),仅非根条件需配置 |
LEFT_OPERAND | VARCHAR2(255) | 左操作数,可填APEX项名、常量或SQL表达式 |
COMPARISON_OPERATOR | VARCHAR2(20) | 比较运算符,对应APEX原生运算符(如=、!=、>、LIKE、IN) |
RIGHT_OPERAND | VARCHAR2(255) | 右操作数,可填APEX项名、常量或SQL表达式 |
CONDITION_TYPE | VARCHAR2(50) | 条件类型(如ITEM_COMPARISON、SQL_EXPRESSION、REGEX_MATCH) |
二、复用APEX原生验证引擎的方案
1. 同步生成APEX原生验证元数据
APEX的验证规则存储在系统表APEX_APPLICATION_VALIDATIONS中,可通过以下步骤复用原生引擎:
- 用户在前端配置完验证规则后,将数据写入自定义表,同时动态生成符合APEX元数据格式的记录插入到系统表中(需严格控制权限,仅允许用户操作自身名下的验证)
- 用户修改或删除验证时,同步更新系统表对应记录
- 页面提交或触发验证时,APEX会自动读取系统表中的规则,实现与原生验证完全一致的执行效果
2. 调用APEX内置验证API
利用APEX提供的PL/SQL API直接执行验证逻辑:
- 将用户自定义的验证规则转换为
APEX_VALIDATION.EXECUTE_VALIDATION等API所需的参数格式 - 在页面提交事件或项值变更事件中,触发自定义PL/SQL过程,调用API执行用户验证
- 捕获API返回的验证结果,调用APEX原生错误提示方法展示信息,保持风格统一
3. 前端动态渲染验证逻辑
若不想直接操作APEX系统表,可通过JavaScript实现前端验证:
- 从自定义表读取用户验证规则,转换为可执行的JavaScript条件表达式
- 在页面
submit或项change事件中触发验证 - 验证失败时,调用
apex.message.showErrors方法展示错误,模拟原生验证的交互效果
内容的提问来源于stack exchange,提问作者Adeel Aslam
相关产品推荐
相关产品推荐

