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

Add check constraint regex to Oracle Database

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

所以之前的开发者在相应的 table 中添加了一个约束,我在 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})) );