DB2中UPDATE语句报错SQLCODE=-668,phpMyAdmin正常的解决办法
解决DB2中SQLCODE=-668(reason code7)的更新失败问题
错误原因分析
你遇到的SQLCODE=-668, SQLSTATE=57007错误,reason code7表示目标表处于**检查挂起(Check Pending)**状态。这是DB2的特有机制:当执行ALTER TABLE ADD COLUMN操作后,DB2会标记表为检查挂起状态,用于确保新列的数据完整性符合约束,此时无法执行更新、删除等修改操作。而phpMyAdmin对应的数据库(如MySQL)没有这类严格的检查机制,所以操作可以正常完成。
解决步骤
- 确认表状态
执行以下查询验证表是否处于检查挂起状态:
SELECT TABNAME, STATUS FROM SYSCAT.TABLES WHERE TABNAME = 'PETSALE' AND TABSCHEMA = 'NDH77177';
如果STATUS列返回值为C,则说明表确实处于检查挂起状态。
- 解除检查挂起状态
执行SET INTEGRITY语句解除表的限制,由于你已经手动更新了所有行的QUANTITY值,无需强制检查数据完整性:
SET INTEGRITY FOR "NDH77177"."PETSALE" CHECK IMMEDIATE UNCHECKED;
- 重新执行更新操作
此时再运行你的更新语句:
UPDATE "NDH77177"."PETSALE" SET "QUANTITY" = 22 WHERE "ID" = 5;
即可正常执行。
补充说明
如果后续需要添加带约束的列(如非空列),建议在添加列时直接指定默认值,或者添加列后立即通过SET INTEGRITY处理,避免触发检查挂起状态。
内容的提问来源于stack exchange,提问作者Monidipa Das
相关产品推荐
相关产品推荐

