将检查约束正则表达式添加到 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})) );
我有一个应用程序,其中插入了 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})) );