如何将 Oracle 顶点项限制为 numeric/character 值
How to restrict an Oracle apex item to numeric/character values
我有一个 TEXT 项目字段 - 订单号,用户可以在其中输入他的详细信息。
当用户输入以 1 开头的订单号时,它应该只允许输入数值。
当用户输入以 L 开头的订单号时,它应该接受数字和字母。
如何在 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;
APEX 应用程序:
我有一个 TEXT 项目字段 - 订单号,用户可以在其中输入他的详细信息。
当用户输入以 1 开头的订单号时,它应该只允许输入数值。
当用户输入以 L 开头的订单号时,它应该接受数字和字母。
如何在 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;
APEX 应用程序: