quinta-feira, 17 de fevereiro de 2011

🔥 SQLCODE no DB2 – Lendo os Sinais da Força (Guia para Padawans Mainframe) 🔥

 

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