Oracle 11g - 使用 RegEx 检查约束

2023-09-19数据库问题
2

本文介绍了Oracle 11g - 使用 RegEx 检查约束的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着跟版网的小编来一起学习吧!

问题描述

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

I'm using Oracle 11g, and trying to create a table define constraints on the creation.

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

I was trying to add check constraint to validate some information (like e-mail address, phone number, etc...)

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

Is there something in Oracle 11g that would allow me to do something like this?

constraint CK_CONSTRAINT_NAME check (EMAIL like 'REGEX')

我想使用的正则表达式(从 regexLib 中抓取)是:

The regEx I wanted to use (grabbed from regexLib) is:

^[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 的这种格式...

I think Oracle 11g (correct me if I'm wrong) doesn't support this format for RegEx...

我见过使用 REGEX_LIKE 的方法,但它似乎只适用于 WHERE 子句.

I've seen methods using REGEX_LIKE, but it seems to only work in WHERE clauses.

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

I'd like to keep it as a check constraint and not a trigger or an external function/script.

另外,我在这里读过其他主题,有人说 RegEx' 不是验证电子邮件地址格式和此类信息的好方法.评论中没有给出原因,如果有原因,我想知道为什么!

Also, I've read in other threads here, someone saying RegEx' are not a good way of verifying e-mail address format and such information. No reason was given in the comment, and I'd like to know why, if a reason there is!

推荐答案

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

A check constraint follows the same syntax rules as conditions for a WHERE clause:

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

手册中的更多详细信息:

More details in the manual:

  • 对于 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


但是,您可以在检查约束中实际使用的内容有一些限制:

There are however some restrictions on what you can actually use in a check constraint:

  • Oracle 11 - http://docs.oracle.com/cd/E11882_01/server.112/e41084/clauses002.htm#SQLRF52205
  • Oracle 12 - https://docs.oracle.com/database/121/SQLRF/clauses002.htm#SQLRF52205

这篇关于Oracle 11g - 使用 RegEx 检查约束的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持跟版网!

The End

相关推荐

Mysql目录里的ibtmp1文件过大造成磁盘占满的解决办法
ibtmp1是非压缩的innodb临时表的独立表空间,通过innodb_temp_data_file_path参数指定文件的路径,文件名和大小,默认配置为ibtmp1:12M:autoextend,也就是说在文件系统磁盘足够的情况下,这个文件大小是可以无限增长的。 为了避免ibtmp1文件无止境的暴涨导致...
2025-01-02 数据库问题
151

按天分组的 SQL 查询
SQL query to group by day(按天分组的 SQL 查询)...
2024-04-16 数据库问题
77

SQL 子句“GROUP BY 1"是什么意思?意思是?
What does SQL clause quot;GROUP BY 1quot; mean?(SQL 子句“GROUP BY 1是什么意思?意思是?)...
2024-04-16 数据库问题
62

MySQL groupwise MAX() 返回意外结果
MySQL groupwise MAX() returns unexpected results(MySQL groupwise MAX() 返回意外结果)...
2024-04-16 数据库问题
13

MySQL SELECT 按组最频繁
MySQL SELECT most frequent by group(MySQL SELECT 按组最频繁)...
2024-04-16 数据库问题
16

在 Group By 查询中包含缺失的月份
Include missing months in Group By query(在 Group By 查询中包含缺失的月份)...
2024-04-16 数据库问题
12