SQLRPGLE程序提交控制设为*NONE仍报-7008,子表清空后无法删除父表
解决方案
SQLCODE -7008 在IBM i平台对应错误为「对象 &1 对操作 &3 无效,原因码为 &2」,你可以先通过查看作业日志(DSPJOBLOG)获取具体的原因码定位问题,针对你当前存在外键约束、子表已清空仍操作失败的场景,可通过以下方案解决:
方案1:使用CLRPFM命令时添加移除约束参数
CLRPFM默认不会处理依赖约束,哪怕子表无数据,也会因父表存在关联外键拒绝操作,执行时添加RMVCST(*YES)参数即可临时移除约束,清空完成后自动恢复:
CLRPFM FILE(你的库名/GRID_DETAILS) RMVCST(*YES) CLRPFM FILE(你的库名/ACTION_CODE_DETAILS) RMVCST(*YES)
方案2:临时禁用外键约束后执行删除/清空操作
如果需要通过SQL执行删除操作,可以先禁用子表的外键约束,操作完成后再重新启用:
- 先查询子表的外键约束名(如果创建时未显式命名):
SELECT CONSTRAINT_NAME FROM QSYS2.SYSCST WHERE TABLE_NAME = 'GRID_ACTION_DETAILS' AND CONSTRAINT_TYPE = 'FOREIGN KEY'
- 禁用两个外键约束:
ALTER TABLE grid_action_details ALTER FOREIGN KEY [你查到的grid_details外键名] DISABLE; ALTER TABLE grid_action_details ALTER FOREIGN KEY [你查到的action_code_details外键名] DISABLE;
- 执行父表的删除操作或者CLRPFM清空
- 操作完成后重新启用外键约束:
ALTER TABLE grid_action_details ALTER FOREIGN KEY [你查到的grid_details外键名] ENABLE; ALTER TABLE grid_action_details ALTER FOREIGN KEY [你查到的action_code_details外键名] ENABLE;
方案3:检查对象锁排除占用
如果上述操作仍然报错,说明有其他作业持有父表或子表的锁,执行以下命令查看对象锁:
WRKOBJLCK OBJ(你的库名/GRID_DETAILS) OBJTYPE(*FILE) WRKOBJLCK OBJ(你的库名/ACTION_CODE_DETAILS) OBJTYPE(*FILE)
结束持有锁的作业或者等待锁释放后再执行操作即可。
内容的提问来源于stack exchange,提问作者theju112t
相关产品推荐
相关产品推荐

