gpt4 book ai didi

sql - Oracle 11g - 使用 RegEx 检查约束

转载 作者:行者123 更新时间:2023-12-04 13:24:33 26 4
gpt4 key购买 nike

我正在使用 Oracle 11g,并尝试创建一个表来定义对创建的约束。

我试图添加检查约束来验证一些信息(如电子邮件地址、电话号码等...)

Oracle 11g 中是否有允许我执行此类操作的内容?

constraint CK_CONSTRAINT_NAME check (EMAIL like 'REGEX')

我想使用的正则表达式(从 regexLib 中抓取)是:
^[a-zA-Z][a-zA-Z0-9_\.\-]+@([a-zA-Z0-9-]{2,}\.)+([a-zA-Z]{2,4}|[a-zA-Z]{2}\.[a-zA-Z]{2})$

我认为 Oracle 11g(如果我错了请纠正我)不支持 RegEx 的这种格式......

我见过使用 REGEX_LIKE 的方法,但它似乎只适用于 WHERE条款。

我想将其保留为检查约束,而不是触发器或外部函数/脚本。

另外,我在这里读过其他线程,有人说 RegEx 不是验证电子邮件地址格式和此类信息的好方法。评论中没有给出任何理由,如果有理由,我想知道为什么!

最佳答案

检查约束遵循与 WHERE 子句的条件相同的语法规则:

alter table foo
add constraint check_email
check (REGEXP_LIKE(email,'your_regex_goes_here','I'));

手册中的更多详细信息:
  • 对于 Oracle 11 - http://docs.oracle.com/cd/E11882_01/server.112/e41084/conditions007.htm#SQLRF52141
  • 对于 Oracle 12 - https://docs.oracle.com/database/121/SQLRF/conditions007.htm#SQLRF52141

  • 编辑:

    但是,您可以在检查约束中实际使用的内容有一些限制:
  • 甲骨文 11 - http://docs.oracle.com/cd/E11882_01/server.112/e41084/clauses002.htm#SQLRF52205
  • 甲骨文 12 - https://docs.oracle.com/database/121/SQLRF/clauses002.htm#SQLRF52205
  • 关于sql - Oracle 11g - 使用 RegEx 检查约束,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7621568/

    26 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com