Matriz de host SQLCA.SQLERRD no Pro*C
-
13-12-2019 - |
Pergunta
Como sabemos em muitas documentações é mencionado que o terceiro elemento do array Host SQLCA.SQLERRD
ou seja sqlca.sqlerrd[2]
contém o número cumulativo de linhas processadas pela instrução SQL até o momento (em termos de Pro*C).
Alguém sabe do significado dos outros elementos, ou seja, [0]
,[1]
e o que eles significam?
Solução
De acordo com documentação de tratamento de erros, eles não fazem nada;eles estão reservados para uso futuro, embora comece a parecer improvável que algum dia sejam utilizados. sqlerrd
é declarado como long[6]
, se apenas [2]
e [4]
parecem ser usados, sendo o último o deslocamento na instrução SQL para um erro de análise.
É interessante que eles não usem [0], [1] ou [3];me pergunto se eles foram usados para outra coisa em uma versão anterior. Este antigo link do Informix tem uma estrutura semelhante com significados semelhantes para [2]
e [4]
, então pode dar uma dica sobre para que eles esperavam usar os outros;mas pode ser uma coincidência sem sentido...
PostgreSQL parece ter a mesma estrutura, como faz DB2, e servidor SQL tem algo que parece relacionado.Está começando a parecer suspeitamente um padrão...embora seja um ao qual a Oracle adere apenas parcialmente.
Outras dicas
Do "Guia Informix para SQL" (fevereiro de 1998):
('Primeiro', 'Segundo', etc.porque nem todas as linguagens indexam matrizes começando com 0.)
Primeiro - Após uma instrução PREPARE bem-sucedida para uma instrução SELECT, UPDATE, INSERT ou DELETE, ou após um cursor de seleção ser aberto, este campo contém o número estimado de linhas afetadas.
Segundo - Quando SQLCODE contém um código de erro, este campo contém zero ou um código de erro adicional, denominado código de erro ISAM, que explica a causa do erro principal.Após uma operação de inserção bem-sucedida de uma única linha, este campo contém o valor de qualquer valor SERIAL gerado para essa linha.
Terceiro - Após uma operação bem-sucedida de inserção, atualização ou exclusão de múltiplas linhas, este campo contém o número de linhas que foram processadas.Após uma operação de inserção, atualização ou exclusão de múltiplas linhas que termina com um erro, esse campo contém o número de linhas que foram processadas com êxito antes do erro ser detectado.
Quarto - Após uma instrução PREPARE bem-sucedida para uma instrução SELECT, UPDATE, INSERT ou DELETE, ou após um cursor de seleção ter sido aberto, este campo contém a soma ponderada estimada de acessos ao disco e o total de linhas processadas.
Quinto - Após um erro de sintaxe em uma instrução PREPARE, EXECUTE IMMEDIATE, DECLARE ou SQL estática, este campo contém o deslocamento no texto da instrução onde o erro foi detectado.
Sexto - Após uma busca bem-sucedida de uma linha selecionada ou uma operação de inserção, atualização ou exclusão bem-sucedida, este campo contém o rowid (endereço físico) da última linha que foi processada.Se esse valor rowid corresponde a uma linha que o servidor de banco de dados retorna ao usuário depende de como o servidor de banco de dados processa uma consulta, particularmente para instruções SELECT.