[英]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.