我有一个 TEXT 项目字段 - 订单号,用户可以在其中输入详细信息。
当用户输入以1开头的订单号时,它应该只允许数值。
当用户输入以L开头的订单号时,它应接受数字和字母。
有人可以帮助我在Oracle Apex中如何做到这一点吗?
答案 0 :(得分:0)
您可以在列上使用 CHECK 约束以允许:
检查约束将是:
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'
。
效果很好!
答案 1 :(得分:0)