如何将 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 顶点项限制为数字/字符值的主要内容,如果未能解决你的问题,请参考以下文章

OpenGL中的顶点限制

Oracle 顶点选择列表和隐藏值

Oracle 空间 - 逆时针检查多边形顶点

Gremlin如何同时搜索数字和字符串

如何将值向量分配给R中igraph中的顶点标签?

如何在 OpenGL 中以像素为单位指定顶点?