Como usar as áreas de diagnóstico sql
Apesar SQLSTATE
Conteúdo
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
Campos | Tipo de dados |
---|---|
NÚMERO | numérico exato com nenhuma parte fracionária |
CONTAGEM DE LINHAS | numérico exato com nenhuma parte fracionária |
COMMAND_FUNCTION | VARCHAR (Implementação definido max comprimento) |
COMMAND_FUNCTION_CODE | numérico exato com nenhuma parte fracionária |
DYNAMIC_FUNCTION | VARCHAR (Implementação definido max comprimento) |
DYNAMIC_FUNCTION_CODE | numérico exato com nenhuma parte fracionária |
MAIS | numérico exato com nenhuma parte fracionária |
TRANSACTIONS_COMMITTED | numérico exato com nenhuma parte fracionária |
TRANSACTIONS_ROLLED_BACK | numérico exato com nenhuma parte fracionária |
TRANSACTION_ACTIVE | numé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.
Campos | Tipo de dados |
---|---|
CONDITION_NUMBER | numérico exato com nenhuma parte fracionária |
RETURNED_SQLSTATE | CHAR (6) |
MENSAGEM DE TEXTO | VARCHAR (Implementação definido max comprimento) |
message_length | numérico exato com nenhuma parte fracionária |
MESSAGE_OCTET_LENGTH | numérico exato com nenhuma parte fracionária |
CLASS_ORIGIN | VARCHAR (Implementação definido max comprimento) |
SUBCLASS_ORIGIN | VARCHAR (Implementação definido max comprimento) |
connection_name | VARCHAR (Implementação definido max comprimento) |
NOME DO SERVIDOR | VARCHAR (Implementação definido max comprimento) |
CONSTRAINT_CATALOG | VARCHAR (Implementação definido max comprimento) |
CONSTRAINT_SCHEMA | VARCHAR (Implementação definido max comprimento) |
CONSTRAINT_NAME | VARCHAR (Implementação definido max comprimento) |
CATALOG_NAME | VARCHAR (Implementação definido max comprimento) |
SCHEMA_NAME | VARCHAR (Implementação definido max comprimento) |
TABLE_NAME | VARCHAR (Implementação definido max comprimento) |
NOME DA COLUNA | VARCHAR (Implementação definido max comprimento) |
cursor_name | VARCHAR (Implementação definido max comprimento) |
CONDITION_IDENTIFIER | VARCHAR (Implementação definido max comprimento) |
PARAMETER_NAME | VARCHAR (Implementação definido max comprimento) |
PARAMETER_ORDINAL_POSITION | numérico exato com nenhuma parte fracionária |
PARAMETER_MODE | numérico exato com nenhuma parte fracionária |
ROUTINE_CATALOG | VARCHAR (Implementação definido max comprimento) |
ROUTINE_SCHEMA | VARCHAR (Implementação definido max comprimento) |
ROUTINE_NAME | VARCHAR (Implementação definido max comprimento) |
SPECIFIC_NAME | VARCHAR (Implementação definido max comprimento) |
TRIGGER_CATALOG | VARCHAR (Implementação definido max comprimento) |
TRIGGER_SCHEMA | VARCHAR (Implementação definido max comprimento) |
TRIGGER_NAME | VARCHAR (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.