如何将 Oracle 顶点项限制为数字/字符值
Posted
技术标签:
【中文标题】如何将 Oracle 顶点项限制为数字/字符值【英文标题】:How to restrict an Oracle apex item to numeric/character values 【发布时间】:2015-04-21 05:52:50 【问题描述】:我有一个 TEXT 项目字段 - 订单号,用户可以在其中输入他的详细信息。
当用户输入以 1 开头的订单号时,它应该只允许数值。
当用户输入以 L 开头的订单号时,它应该接受数字和字母。
如何在 Oracle Apex 中执行此操作?
【问题讨论】:
【参考方案1】:您可以在列上使用 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'
。
完美运行!
【讨论】:
非常感谢:) 逻辑工作:) @Gayathri 不客气,请将其标记为已回答。它会帮助别人。在 Stack Overflow,如果您喜欢答案,也可以投票。欢迎来到 Stack Overflow :-) 当然我会把它标记为已回答。你能帮我解决以下问题吗:***.com/questions/29743964/… 我看到了这个问题,但是,我不使用报告。所以,我恐怕帮不了你。【参考方案2】:对于检查何时提交 APEX 页面并在错误字段上提供漂亮错误消息的解决方案,您可以为该字段创建一个“验证”,此处示例验证电子邮件地址(使用不正确的 REGEX -但相当正确)。它使用返回布尔值的 PL/SQL 函数。
功能:
begin
return regexp_count(:P811_EMAIL_ADDRESS, '^[-_A-Z0-9.]+@([A-Z]+\.)?[A-Z]+\.COM$') >= 1;
end;
APEX 应用程序:
【讨论】:
以上是关于如何将 Oracle 顶点项限制为数字/字符值的主要内容,如果未能解决你的问题,请参考以下文章