| SQLCODE quando o programa Cobol deve tratar o retorno do db2 |
🔥 SQLCODE no DB2 – Lendo os Sinais da Força (Guia para Padawans Mainframe) 🔥
Todo padawan que começa no DB2 passa pelo mesmo rito de iniciação:
o programa compila, o BIND passa…
e na execução surge aquela linha silenciosa e cruel:
SQLCODE = -911
Fim.
Tela verde.
Respiração suspensa.
Mas calma. SQLCODE não é inimigo.
Ele é o oráculo do DB2 — fala pouco, mas fala a verdade.
🧠 O Que é SQLCODE, de Verdade?
SQLCODE é a forma que o DB2 tem de dizer:
👉 “Eu tentei.”
👉 “Funcionou.”
👉 “Funcionou mais ou menos.”
👉 “Deu ruim.”
Cada comando SQL retorna um SQLCODE.
Sempre.
Sem exceção.
💡 Regra de ouro Bellacosa:
Nunca ignore SQLCODE.
Quem ignora SQLCODE, debuga em produção.
⚖️ Zero, Positivo ou Negativo – A Trindade Sagrada
🟢 SQLCODE = 0 → Tudo Certo
O DB2 está feliz.
Você também deveria estar.
SELECT encontrou linha
INSERT gravou
UPDATE atualizou
DELETE removeu
💡 Comentário:
Zero não é “talvez”.
Zero é sucesso absoluto.
🟡 SQLCODE > 0 → Aviso (Warning)
Aqui mora a confusão dos iniciantes.
Positivo não é erro.
É o DB2 dizendo:
“Funcionou… mas presta atenção.”
Exemplos clássicos:
+100→ nenhuma linha encontrada+802→ divisão por zero evitada+466→ truncate de dado
💡 Dica Padawan:+100 em SELECT não é falha.
É lógica de negócio.
🥚 Easter egg:
Muitos sistemas tratam +100 como erro… e criam bugs por conta própria.
🔴 SQLCODE < 0 → Erro
Aqui o DB2 cruzou os braços.
Nada foi feito.
Ou pior: foi feito parcialmente.
Negativo significa:
SQL inválido
Dados inconsistentes
Lock
Timeout
Permissão
Conversão errada
💡 Regra Jedi:
SQLCODE negativo exige ação imediata.
Ignorar é lado sombrio.
🧨 SQLCODEs que Todo Padawan Precisa Conhecer
🔥 -100 → Nenhuma linha encontrada (antigo)
Hoje quase arqueologia.
Substituído por +100.
🔥 +100 → Nenhuma linha encontrada
Clássico do SELECT:
SELECT ... INTO ...
Sem registro.
💡 Dica:
Teste +100 como fluxo normal.
Não como exceção.
🔥 -305 → NULL sem indicador
DB2 tentou colocar NULL em campo COBOL “cheio de orgulho”.
💡 Lição:
Campo nullable exige indicador.
🔥 -302 → Conversão ou tamanho inválido
Número grande demais, decimal errado, CHAR mal definido.
💡 Fofoquinha:
90% dos -302 vêm de DCLGEN desatualizado.
🔥 -803 → Violação de chave única
Tentou inserir algo que já existe.
💡 Boa prática:
-803 não é erro técnico.
É regra de negócio.
🔥 -805 → DBRM / PACKAGE não encontrado
O terror noturno.
💡 Tradução Bellacosa:
“Esqueceu o BIND.”
🔥 -818 → Timestamp mismatch
Recompilou, mas não rebindeou.
💡 Comentário:
Esse erro ensina disciplina melhor que qualquer curso.
🔥 -911 / -913 → Deadlock ou Timeout
DB2 desistiu da briga.
💡 Dica Jedi:
Trate retry no código.
Não xingue o DB2 — ele só sobreviveu.
🧪 SQLERRD(3) – O Número que Poucos Olham
Dentro do SQLCA existe um tesouro esquecido:
👉 SQLERRD(3) = número de linhas afetadas
UPDATE
DELETE
INSERT
💡 Easter egg profissional:
Às vezes SQLCODE = 0…
mas SQLERRD(3) = 0.
Executou, mas não mudou nada.
⚙️ Tratamento de SQLCODE no COBOL – Boas Práticas
Nunca faça:
IF SQLCODE NOT = 0
DISPLAY 'ERRO'
END-IF
Faça:
Trate 0
Trate +100
Trate negativos relevantes
💡 Dica Bellacosa:
SQLCODE é parte da lógica, não exceção.
🗣️ Fofoquices de Sala-Cofre
“Mas em QA funciona” → dado diferente
“Nunca deu isso antes” → agora deu
“É erro intermitente” → lock
🧠 Pensamento Final do El Jefe
SQLCODE é o idioma do DB2.
Quem não fala esse idioma:
culpa o banco
cria workaround perigoso
aprende do jeito difícil
🔥 Para o Padawan:
Leia o SQLCODE.
Entenda o contexto.
Respeite os avisos.
Porque no DB2,
o erro não grita — ele retorna um número. 🧠💾
Sem comentários:
Enviar um comentário