最近在执行数据归档的存储过程的时候,总是抛出以下异常信息:ORA-02290: check constraint (BZFZ_YC_IA.SYS_C0091946) violated。这个异常很奇怪,之前没遇到过,而且SYS_C0091946在plsql developer中也找不到,猜测可能是有字段不能为空造成的。但是根据经验字段不能为空应该抛出ORA-01400: cannot insert NULL into ("BZFZ_YC_IA"."HIS_CASE_INFO"."BILLING_STATUS")的异常,而且在plsql developer中查看,该字段确实是可为空的,而且也没有任何约束。一直纠结了半天,才在网上找到一些相关信息。
首先,oracle数据库的约束有五种类型: 1、主键约束( Primary key, 简称 PK) 、 2、非空约束( not null , 简称 NN ) 、 3、唯一约束( Unique , 简称 UK ) 、4、检查约束( Check , 简称 CK ) 、 5、外键( Foreign key, 简称 FK )。这里的check应该是检查约束。
要确定约束在哪一字段上,使用sql:
select * from user_constraints where table_name='TABLENAME';
SELECT * FROM USER_CONS_COLUMNS WHERE TABLE_NAME='TABLENAME';
找到SYS_C0091946,删掉即可:ALTER TABLE TABLENAME DROP CONSTRAINT SYS_C0091946