Como usar as áreas de diagnóstico sql

Apesar SQLSTATE

pode lhe dar algumas informações sobre por que uma instrução específica falhou, a informação é muito breve. Então SQL prevê a captação e retenção de informações de status adicional em áreas de diagnóstico.

As informações de status adicional em uma área de diagnóstico pode ser particularmente útil nos casos em que a execução de uma única instrução SQL gera várias advertências, seguido por um erro. SQLSTATE relata a ocorrência de apenas um erro, mas a área de diagnósticos tem a capacidade de gerar relatórios em vários erros.

A área de diagnóstico é uma estrutura de dados gerenciados pelo SGBD que tem dois componentes:

  • Cabeçalho: O cabeçalho contém informações gerais sobre a instrução SQL mais recente que foi executado.

  • área Detalhe: A área de Detalhes contém informações sobre cada código que a declaração gerada.

área de cabeçalho Diagnostics

No conjunto de transações declaração, você pode especificar TAMANHO DIAGNOSTICS. o TAMANHO que você especificar é o número de áreas de detalhe alocados para informações de status. Se você não incluir um TAMANHO DIAGNOSTICS cláusula no seu conjunto de transações declaração, o DBMS atribui seu número predefinido de áreas de detalhe.

Video: Como usar Vick VapoRub e tratar problemas da cabeça aos pés

CamposTipo de dados
NÚMEROnumérico exato com nenhuma parte fracionária
CONTAGEM DE LINHASnumérico exato com nenhuma parte fracionária
COMMAND_FUNCTIONVARCHAR (Implementação definido max
comprimento)
COMMAND_FUNCTION_CODEnumérico exato com nenhuma parte fracionária
DYNAMIC_FUNCTIONVARCHAR (Implementação definido max
comprimento)
DYNAMIC_FUNCTION_CODEnumérico exato com nenhuma parte fracionária
MAISnumérico exato com nenhuma parte fracionária
TRANSACTIONS_COMMITTEDnumérico exato com nenhuma parte fracionária
TRANSACTIONS_ROLLED_BACKnumérico exato com nenhuma parte fracionária
TRANSACTION_ACTIVEnumérico exato com nenhuma parte fracionária

A lista a seguir descreve esses itens em mais detalhes:

  • o NÚMERO campo é o número de áreas de detalhes que foram preenchidos com informações de diagnóstico sobre a exceção atual.

  • o CONTAGEM DE LINHAS campo contém o número de linhas afetadas se a instrução SQL anterior era um INSERIR, ATUALIZAR, ou EXCLUIR.

  • o COMMAND_FUNCTION campo descreve a instrução SQL que acabou de ser executado.

    Video: ¿Cómo funciona INNER JOIN, LEFT JOIN, RIGHT JOIN y FULL JOIN?

  • o COMMAND_FUNCTION_CODE campo dá o número de código para a instrução SQL que acabou de ser executado. Cada função de comando tem um código numérico associado.

  • o DYNAMIC_FUNCTION campo contém a instrução SQL dinâmica.



  • o DYNAMIC_FUNCTION_CODE campo contém um código numérico correspondente à instrução SQL dinâmica.

  • o MAIS campo pode ser um ‘Y’ ou um ‘N’. ‘Y’ indica que existem mais registros de status do que a área de detalhes pode conter. ‘N’ indica que todos os registos de estado geradas estão presentes na área de detalhe. Dependendo da sua aplicação, você pode ser capaz de expandir o número de registros que você pode manipular usando a conjunto de transações declaração.

  • o TRANSACTIONS_COMMITTED campo contém o número de transações que foram cometidos.

    Video: Curso de Oracle (Tuning) 05 - Trabalhando com o Library Cache

  • o TRANSACTIONS_ROLLED_BACK campo contém o número de transações que foram revertidas.

  • o TRANSACTION_ACTIVE campo detém uma ‘1’ se uma transação está ativa e uma ‘0’ de outra forma. Uma transação é considerada ativa se um cursor estiver aberta ou se o DBMS está à espera de um parâmetro diferido.

área de detalhes Diagnostics

As áreas de detalhes contêm dados sobre cada erro, aviso ou condição individual sucesso.

CamposTipo de dados
CONDITION_NUMBERnumérico exato com nenhuma parte fracionária
RETURNED_SQLSTATECHAR (6)
MENSAGEM DE TEXTOVARCHAR (Implementação definido max
comprimento)
message_lengthnumérico exato com nenhuma parte fracionária
MESSAGE_OCTET_LENGTHnumérico exato com nenhuma parte fracionária
CLASS_ORIGINVARCHAR (Implementação definido max
comprimento)
SUBCLASS_ORIGINVARCHAR (Implementação definido max
comprimento)
connection_nameVARCHAR (Implementação definido max
comprimento)
NOME DO SERVIDORVARCHAR (Implementação definido max
comprimento)
CONSTRAINT_CATALOGVARCHAR (Implementação definido max
comprimento)
CONSTRAINT_SCHEMAVARCHAR (Implementação definido max
comprimento)
CONSTRAINT_NAMEVARCHAR (Implementação definido max
comprimento)
CATALOG_NAMEVARCHAR (Implementação definido max
comprimento)
SCHEMA_NAMEVARCHAR (Implementação definido max
comprimento)
TABLE_NAMEVARCHAR (Implementação definido max
comprimento)
NOME DA COLUNAVARCHAR (Implementação definido max
comprimento)
cursor_nameVARCHAR (Implementação definido max
comprimento)
CONDITION_IDENTIFIERVARCHAR (Implementação definido max
comprimento)
PARAMETER_NAMEVARCHAR (Implementação definido max
comprimento)
PARAMETER_ORDINAL_POSITIONnumérico exato com nenhuma parte fracionária
PARAMETER_MODEnumérico exato com nenhuma parte fracionária
ROUTINE_CATALOGVARCHAR (Implementação definido max
comprimento)
ROUTINE_SCHEMAVARCHAR (Implementação definido max
comprimento)
ROUTINE_NAMEVARCHAR (Implementação definido max
comprimento)
SPECIFIC_NAMEVARCHAR (Implementação definido max
comprimento)
TRIGGER_CATALOGVARCHAR (Implementação definido max
comprimento)
TRIGGER_SCHEMAVARCHAR (Implementação definido max
comprimento)
TRIGGER_NAMEVARCHAR (Implementação definido max
comprimento)

CONDITION_NUMBER mantém o número de sequência de área de detalhe. Se uma declaração gera cinco itens de status que enchem-se cinco áreas de detalhe, os CONDITION_NUMBER para a quinta área de detalhe é 5. Para recuperar uma área de detalhes específicos para exame, use um GET DIAGNOSTICS declaração com o desejado CONDITION_NUMBER. RETURNED_SQLSTATE detém o SQLSTATE valor que causou esta área detalhe a ser preenchido.

CLASS_ORIGIN diz a fonte do valor de código de classe retornado em SQLSTATE. Se o padrão SQL define o valor, CLASS_ORIGIN é ‘ISO 9075’. Se sua implementação DBMS define o valor, CLASS_ORIGIN detém uma cadeia que identifica a fonte de seu DBMS. SUBCLASS_ORIGIN diz a fonte do valor de código subclasse retornou em SQLSTATE.

CLASS_ORIGIN é importante. Se você receber uma SQLSTATE do ‘22012’, os valores indicam que é na faixa de padrão SQLSTATEs, então você sabe que significa a mesma coisa em todas as implementações de SQL.

No entanto, se o SQLSTATE é ‘22500’, os dois primeiros caracteres estão na faixa padrão e indicam uma exceção de dados, mas os três últimos caracteres estão na faixa definida pela implementação. E se SQLSTATE é ‘90001’, é completamente na faixa definida pela implementação. SQLSTATE valores no intervalo definido pela implementação pode significar coisas diferentes em diferentes implementações, mesmo que o código em si pode ser o mesmo.

Assim como você descobrir o significado detalhado de ‘22500’ ou o significado de ‘90001’? Você deve olhar na documentação do implementador. Que implementador?

Para determinar qual deles produzidos a condição de erro, olhar CLASS_ORIGIN e SUBCLASS_ORIGIN: Eles têm valores que identificam cada implementação. Você pode testar a CLASS_ORIGIN e SUBCLASS_ORIGIN para ver se eles identificam implementadores para o qual você tem a SQLSTATE listagens. Os valores reais colocados em CLASS_ORIGIN e SUBCLASS_ORIGIN são implementador-definido, mas eles também são esperados para ser nomes de empresas auto-explicativos.

Se o erro relatado é uma violação de restrição, o CONSTRAINT_CATALOG, CONSTRAINT_SCHEMA, e CONSTRAINT_NAME identificar a restrição a ser violados.


Publicações relacionadas