异常的起因:
数据库设计往往和业务逻辑相关,所以设计的数据库表有一些字段添加了非空校验(Not Null);后来发现之前非空字段中部分字段允许为空(Null),所以我就直接通过Navicat工具操作,取消了非空标记。
运行程序,出现SQL异常:
ORA-02290: check constraint (CUSTOMER.SYS_C00180123) violated
分析:
根据异常信息和网上大神的分析发现,是数据库表中的部分字段违反了检查约束,但SQL异常并未指出具体字段,所以首先要知道违反检查约束的字段有哪些,
查询违反检查约束的字段:
SELECT * FROM user_constraints WHERE table_name='TABLE_NAME';
注:SQL中WHERE条件中的TABLE_NAME就是你需要查询的表名称
以下是查询出报错表的所有检查约束:
现在知道了所有检查约束,注意观察CONSTRAINT_NAME字段;也知道SQL异常中指出的报错信息:
ORA-02290: check constraint (CUSTOMER.SYS_C00180123) violated
说明是CUSTOMER.SYS_C00180123违反了检查约束,明确了问题,就根据报错的值删除对应的记录
ALTER TABLE TABLE_NAME DROP CONSTRAINT SYS_C00180123;
执行完即可继续运行程序(上面截图是我在执行之后截取的,所以没有CUSTOMER.SYS_C00180123值)。
参考链接:
https://www.cnblogs.com/ladyM/p/8580072.html
https://www.cnblogs.com/chenglc/p/9626165.html