Comment utiliser les zones de diagnostic sql

Bien que SQLSTATE

Sommaire

peut vous donner quelques informations sur la raison pour laquelle une déclaration a été un échec, l'information est assez brève. Donc SQL fournit pour la capture et la rétention des informations d'état supplémentaires dans les zones de diagnostic.

Les informations d'état supplémentaire dans une zone de diagnostic peut être particulièrement utile dans les cas où l'exécution d'une instruction SQL unique génère de multiples avertissements suivis par une erreur. SQLSTATE rapporte l'occurrence de seulement une erreur, mais la zone de diagnostic a la capacité de rendre compte des erreurs multiples.

La zone de diagnostic est une structure de données SGBD géré qui comporte deux volets:

  • Entête: L'en-tête contient des informations générales sur la plus récente instruction SQL qui a été exécuté.

  • Zone de Détail: La zone de détail contient des informations sur chaque code que la déclaration produite.

Diagnostics zone d'en-tête

Dans le SET TRANSACTION déclaration, vous pouvez spécifier DIAGNOSTICS TAILLE. La TAILLE que vous spécifiez est le nombre de zones de détail alloués pour les informations d'état. Si vous ne spécifiez pas un DIAGNOSTICS TAILLE clause dans votre SET TRANSACTION déclaration, votre SGBD attribue son numéro par défaut des zones de détail.

Les champsType de données
NOMBRENumérique exacte avec aucune partie fractionnaire
ROW_COUNTNumérique exacte avec aucune partie fractionnaire
COMMAND_FUNCTIONVARCHAR (mise en oeuvre définie maxlength)
COMMAND_FUNCTION_CODENumérique exacte avec aucune partie fractionnaire
DYNAMIC_FUNCTIONVARCHAR (mise en oeuvre définie maxlength)
DYNAMIC_FUNCTION_CODENumérique exacte avec aucune partie fractionnaire
PLUSNumérique exacte avec aucune partie fractionnaire
TRANSACTIONS_COMMITTEDNumérique exacte avec aucune partie fractionnaire
TRANSACTIONS_ROLLED_BACKNumérique exacte avec aucune partie fractionnaire
TRANSACTION_ACTIVENumérique exacte avec aucune partie fractionnaire

La liste suivante décrit ces éléments plus en détail:

  • La NOMBRE domaine est le nombre de zones de détail qui ont été remplis avec des informations de diagnostic sur l'exception en cours.




  • La ROW_COUNT champ contient le nombre de lignes affectées si l'instruction SQL précédente était un INSERT, METTRE À JOUR, ou EFFACER.

  • La COMMAND_FUNCTION champ décrit l'instruction SQL qui vient d'être exécutée.

  • La COMMAND_FUNCTION_CODE champ donne le numéro de code pour l'instruction SQL qui vient d'être exécutée. Chaque fonction de commande dispose d'un code numérique associé.

  • La DYNAMIC_FUNCTION champ contient l'instruction SQL dynamique.

  • La DYNAMIC_FUNCTION_CODE champ contient un code numérique correspondant à l'instruction SQL dynamique.

  • La PLUS champ peut être soit un 'Y' ou un 'N'. 'Y' indique qu'il ya plus de registres de l'état que la zone de détail peut contenir. 'N' indique que tous les actes d'état générés sont présents dans la zone de détail. En fonction de votre application, vous pourriez être en mesure d'étendre le nombre d'enregistrements que vous pouvez manipuler en utilisant le SET TRANSACTION déclaration.

  • La TRANSACTIONS_COMMITTED champ contient le nombre de transactions qui ont été commis.

  • La TRANSACTIONS_ROLLED_BACK champ contient le nombre de transactions qui ont été annulées.

  • La TRANSACTION_ACTIVE titulaire d'un champ '1' si une transaction est actuellement actif et un '0' autrement. Une transaction est considérée comme active si un curseur est ouverte ou si le SGBD est en attente d'un paramètre différé.

Diagnostics zone de détail

Les zones de détail contiennent des données sur chaque erreur, un avertissement ou l'état individuel de réussite.

Les champsType de données
CONDITION_NUMBERNumérique exacte avec aucune partie fractionnaire
RETURNED_SQLSTATECHAR (6)
MESSAGE_TEXTVARCHAR (mise en oeuvre définie maxlength)
MESSAGE_LENGTHNumérique exacte avec aucune partie fractionnaire
MESSAGE_OCTET_LENGTHNumérique exacte avec aucune partie fractionnaire
CLASS_ORIGINVARCHAR (mise en oeuvre définie maxlength)
SUBCLASS_ORIGINVARCHAR (mise en oeuvre définie maxlength)
CONNECTION_NAMEVARCHAR (mise en oeuvre définie maxlength)
NOM DU SERVEURVARCHAR (mise en oeuvre définie maxlength)
Constraint_catalogVARCHAR (mise en oeuvre définie maxlength)
Constraint_schemaVARCHAR (mise en oeuvre définie maxlength)
CONSTRAINT_NAMEVARCHAR (mise en oeuvre définie maxlength)
CATALOG_NAMEVARCHAR (mise en oeuvre définie maxlength)
SCHEMA_NAMEVARCHAR (mise en oeuvre définie maxlength)
TABLE_NAMEVARCHAR (mise en oeuvre définie maxlength)
COLUMN_NAMEVARCHAR (mise en oeuvre définie maxlength)
Cursor_nameVARCHAR (mise en oeuvre définie maxlength)
CONDITION_IDENTIFIERVARCHAR (mise en oeuvre définie maxlength)
NOM_PARAMETREVARCHAR (mise en oeuvre définie maxlength)
PARAMETER_ORDINAL_POSITIONNumérique exacte avec aucune partie fractionnaire
PARAMETER_MODENumérique exacte avec aucune partie fractionnaire
Routine_catalogVARCHAR (mise en oeuvre définie maxlength)
Routine_schemaVARCHAR (mise en oeuvre définie maxlength)
Routine_nameVARCHAR (mise en oeuvre définie maxlength)
Specific_nameVARCHAR (mise en oeuvre définie maxlength)
Trigger_catalogVARCHAR (mise en oeuvre définie maxlength)
Trigger_schemaVARCHAR (mise en oeuvre définie maxlength)
Trigger_nameVARCHAR (mise en oeuvre définie maxlength)

CONDITION_NUMBER détient le numéro de séquence de la zone de détail. Si une déclaration génère cinq éléments d'état qui remplissent cinq zones de détail, les CONDITION_NUMBER pour la cinquième zone de détail est 5. Pour récupérer une zone spécifique de détail pour examen, utiliser un GET DIAGNOSTICS déclaration avec le désiré CONDITION_NUMBER. RETURNED_SQLSTATE détient la SQLSTATE valeur qui a causé cette zone de détail à pourvoir.

CLASS_ORIGIN vous indique la source de la valeur du code de classe retournée dans SQLSTATE. Si le standard SQL définit la valeur, CLASS_ORIGIN est 'ISO 9075'. Si votre mise en œuvre des SGBD définit la valeur, CLASS_ORIGIN détient une chaîne identifiant la source de votre SGBD. SUBCLASS_ORIGIN vous indique la source de la valeur du code de la sous-classe retournée dans SQLSTATE.

CLASS_ORIGIN est important. Si vous obtenez un SQLSTATE de '22012', les valeurs indiquent qu'il est dans la plage de norme SQLSTATEs, de sorte que vous savez que cela signifie la même chose dans toutes les implémentations de SQL.

Toutefois, si le SQLSTATE est '22500', les deux premiers caractères sont dans la gamme standard et indiquent une exception de données, mais les trois derniers caractères sont dans l'intervalle défini par l'implémentation. Et si SQLSTATE est '90001', il est complètement dans l'intervalle défini par l'implémentation. SQLSTATE valeurs de la plage de mise en œuvre défini peut signifier différentes choses à différentes implémentations, même si le code lui-même peut être la même.

Alors, comment trouvez-vous la signification détaillée '22500' ou le sens de '90001'? Vous devez regarder dans la documentation de l'exécutant. Quel réalisateur?

Pour déterminer celle qui produit la condition d'erreur, regardez CLASS_ORIGIN et SUBCLASS_ORIGIN: Ils ont des valeurs qui identifient chaque mise en œuvre. Vous pouvez tester la CLASS_ORIGIN et SUBCLASS_ORIGIN pour voir si elles identifient les réalisateurs pour lesquels vous avez le SQLSTATE annonces. Les valeurs réelles placées dans CLASS_ORIGIN et SUBCLASS_ORIGIN sont implementor-défini, mais ils sont également censés être des noms de société auto-explicatifs.

Si l'erreur signalée est une violation de contrainte, la Constraint_catalog, Constraint_schema, et CONSTRAINT_NAME identifier la contrainte violée.


» » » » Comment utiliser les zones de diagnostic sql