繁体   English   中英

将检查约束正则表达式添加到 Oracle 数据库

[英]Add check constraint regex to Oracle Database

我有一个应用程序,其中插入了 YYY/YY/YY 或 YYY.YY.YY 之类的代码,然后才插入“。”。

所以之前的开发人员在我在 TEST 环境中放置的相应表中添加了一个约束,但我想添加一个新的

ALTER TABLE DEPLOYMENT_ADM.DEPLOYMENT 
  ADD CONSTRAINT deployment_chk_billing 
  CHECK (   BILLING_CODE LIKE '[0-9]{3}/[0-9]{2}/[0-9]{2}' 
         OR BILLING_CODE LIKE '[0-9]{3}\\.[0-9]{2}\\.[0-9]{2}');

但是当我尝试它时,我有

ORA-02293: cannot validate (DEPLOYMENT_ADM.DEPLOYMENT_CHK_BILLING) - check constraint violated

所以我看不到错误在哪里

你想要regexp_like()

ALTER TABLE DEPLOYMENT_ADM.DEPLOYMENT ADD CONSTRAINT deployment_chk_billing
 CHECK (regexp_like(BILLING_CODE, '^[0-9]{3}/[0-9]{2}/[0-9]{2}|[0-9]{3}\\.[0-9]{2}\\.[0-9]{2}$');

编辑:

我想指出通配符的LIKE是不正确的。 我认为你想要的正则表达式是:

ALTER TABLE DEPLOYMENT_ADM.DEPLOYMENT 
  ADD CONSTRAINT deployment_chk_billing 
  CHECK ( REGEXP_LIKE(BILLING_CODE, '([0-9]{3}/[0-9]{2}/[0-9]{2})|([0-9]{3}[.][0-9]{2}[.][0-9]{2})' ) );

或者,如果您不在乎. /的值相同:

ALTER TABLE DEPLOYMENT_ADM.DEPLOYMENT 
  ADD CONSTRAINT deployment_chk_billing 
  CHECK ( REGEXP_LIKE(BILLING_CODE, '[0-9]{3}[./][0-9]{2}[./][0-9]{2})) );

我使用了这个命令:

ALTER TABLE DEPLOYMENT_ADM.DEPLOYMENT ADD (CONSTRAINT deployment_chk_billing CHECK (REGEXP_LIKE (BILLING_CODE, '^[0-9]{3}[./][0-9]{2}[./][0-9]{2}$')));

它运行良好:参考: http://www.dba-oracle.com/t_regular_expressions_sql_regexp_like.htm

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM