domingo, 27 de dezembro de 2009

DB2 - Assignment of a NULL value to a NOT NULL column

Sabe aquele erro que o DB2 informa dizendo que uma coluna está NULA mas que ela é NOT NULL, mas não diz qual é a coluna? Veja como descobrir qual é a colunar utilizando as informações que ele fornece: TBSPACEID, TABLEID e COLNO.

O erro é o seguinte: Assignment of a NULL value to a NOT NULL column TBSPACEID=?, TABLEID=?, COLNO=? is not allowed. SQLSTATE=23502

Você deve olhar para isso e ficar se perguntando: "Porque eles não dizem qual é o maldito campo que não aceita nulo?" Eu também me faço essa pergunta toda vez que isso acontece, mas para resolver o problema, você pode utilizar o select abaixo. Ele te informa isso.

select
    c.TABNAME,
    c.COLNAME
from
    SYSCAT.COLUMNS c inner join
    SYSCAT.TABLES t on c.TABNAME = t.TABNAME
where
    c.COLNO = ? and
    t.TABLEID = ? and
    t.TBSPACEID = ?


Isso me ajuda muito, principalmente quando estou usando Hibernate ou fazendo migração via ETL. Não preciso ficar debugando para saber qual é o campo.