如何将 Oracle 顶点项限制为 numeric/character 值

How to restrict an Oracle apex item to numeric/character values

我有一个 TEXT 项目字段 - 订单号,用户可以在其中输入他的详细信息。

如何在 Oracle Apex 中执行此操作?

您可以在列上使用 CHECK 约束以允许:

  • 以“1”开头时只有数字的值
  • 以 'L'
  • 开头时的值

检查约束 将是:

CHECK
(
  CASE
  WHEN SUBSTR(text,1,1) ='1' THEN
    REGEXP_substr(text, '^[[:digit:]]+$')
  WHEN SUBSTR(text,1,1) ='L' THEN
    text
  END IS NOT NULL)

我们来看一个测试用例:

设置

SQL> CREATE TABLE t(text VARCHAR2(30));

Table created.

SQL>
SQL> ALTER TABLE t ADD CONSTRAINT t_chk CHECK
  2  (
  3    CASE
  4    WHEN SUBSTR(text,1,1) ='1' THEN
  5      REGEXP_substr(text, '^[[:digit:]]+$')
  6    WHEN SUBSTR(text,1,1) ='L' THEN
  7      text
  8    END IS NOT NULL);

Table altered.

SQL>

测试

SQL> INSERT INTO t VALUES('123');

1 row created.

SQL> INSERT INTO t VALUES('1a');
INSERT INTO t VALUES('1a')
*
ERROR at line 1:
ORA-02290: check constraint (LALIT.T_CHK) violated


SQL> INSERT INTO t VALUES('L12A');

1 row created.

SQL> INSERT INTO t VALUES('A12A');
INSERT INTO t VALUES('A12A')
*
ERROR at line 1:
ORA-02290: check constraint (LALIT.T_CHK) violated


SQL> SELECT * FROM t;

TEXT
------------------------------
123
L12A

SQL>

因此,它只允许'123''L12A'。它 不允许 '1a''A12A'。 完美运行!

对于检查何时提交 APEX 页面并在出错的字段上给出漂亮的错误消息的解决方案,您可以为该字段创建一个 "Validation",此处的示例验证电子邮件地址(使用一个不正确的正则表达式 - 但相当正确)。它使用返回布尔值的 PL/SQL 函数。

函数:

begin
  return regexp_count(:P811_EMAIL_ADDRESS, '^[-_A-Z0-9.]+@([A-Z]+\.)?[A-Z]+\.COM$') >= 1;
end;

A​​PEX 应用程序: