在此记录代码开发过程中,DB2的错误代码,及解决方法。
1、-407 23502 不能把NULL值插到定义为NOT NULL的列中
其中SQLCODE= -407,SQLSTATE=23502 意思是:不能把NULL值插到NOT NULL的列中
根据这个错误日志,我们怎么找到具体是那个NOT NULL的列。其实这个日志已经给出非常详细的信息。
信息中,SQLERRMC=TBSPACEID=2, TABLEID=675, COLNO=17
SELECT * FROM SYSCAT.TABLES WHERE TBSPACEID=2 AND TABLEID=675
通过这条语句可以查到相应的SCHEMA和TABLE。
查询到TABNAME时候,就可以通过COLNO(列顺序号)=17 查询到具体的列
SELECT * FROM SYSCAT.COLUMNS WHERE TABSCHEMA='M' AND TABNAME = 'BILL' AND COlNO='17'
其中,上述SQL中的TABSCHEMA、TABNAME字段值,分别对应上面截图中的对应的值。
这样子CREATED就是我们要找的具体的列。具体解决办法就需要排查一下,为什么这个列为什么没有值了
关联查询语句
SELECT C.* FROM SYSCAT.TABLES T LEFT JOIN SYSCAT.COLUMNS C ON T.TABSCHEMA = C.TABSCHEMA AND T.TABNAME =C.TABNAME WHERE T.TBSPACEID=2 AND T.TABLEID=675 AND C.COLNO='17'
2、-668 56018 不能向用EDITPROC定义的表中添加列
在向DB2表中执行INSERT操作时,报错如下
解决办法:
执行:CALL SYSPROC.ADMIN_CMD('reorg table TABLE_NAME');