Comment gérer les conditions de SQL

Vous pouvez avoir votre look de programme à SQLSTATE

Sommaire

après l'exécution de chaque instruction SQL. Il existe plusieurs possibilités pour ce que vous pouvez faire. Que faites-vous avec la connaissance que vous gagnez?

  • Si vous trouvez un code de classe de 00, vous ne voulez probablement pas à faire quoi que ce soit. Vous voulez l'exécution de procéder comme prévu initialement.

  • Si vous trouvez un code de classe de 01 ou 02, vous voudrez peut-être prendre des mesures spéciales. Si vous attendiez le “ Attention ” ou “ introuvable ” indication, vous voulez probablement laisser exécution procéder. Si vous ne vous attendiez pas l'un de ces codes de classe, vous voulez probablement avoir exécution branche à une procédure qui est spécifiquement conçu pour gérer l'inattendu, mais pas totalement imprévue, avertissement ou pas trouvé résultat.

  • Si vous recevez tout autre code de classe, quelque chose cloche. Vous devez brancher à une procédure de gestion des exceptions. Quelle est la procédure que vous choisissez pour se brancher sur dépend du contenu des trois personnages de sous-classes, ainsi que les deux personnages de la classe de SQLSTATE. Si plusieurs exceptions sont possibles, il devrait y avoir une procédure de gestion des exceptions pour chacun parce que les différentes exceptions exigent souvent des réponses différentes.

    Vous pouvez être en mesure de corriger certaines erreurs ou de trouver des solutions. D'autres erreurs peuvent être fatalisme personne ne va mourir, mais vous pouvez finir par avoir à quitter l'application.

Déclarations de gestionnaire

Vous pouvez mettre un état gestionnaire au sein d'une instruction composée. Pour créer un gestionnaire d'état, vous devez d'abord déclarer la condition qu'il gérera. La condition déclarée peut être une sorte d'exception, ou il peut juste être quelque chose qui est vrai. Voici quelques conditions possibles.

ÉtatDescription
SQLSTATE VALUE'xxyyy 'Précis SQLSTATE valeur
SqlExceptionSQLSTATE classe autre que 00, 01, ou 02
SQLWARNINGSQLSTATE classe 01
PAS TROUVÉSQLSTATE classe 02



Ce qui suit est un exemple d'une déclaration d'état:

BEGINDECLARE constraint_violation CONDITIONFOR SQLSTATE VALEUR '23000' -END -

Cet exemple ne serait pas réaliste, parce que généralement l'instruction SQL qui peuvent causer la maladie de se produire - ainsi que le gestionnaire qui serait invoquée si la condition ne se produit - serait également enfermé dans le BEGIN # 133-END structure.

Actions de gestionnaire et de gestionnaire effets

Si une condition se produit qui invoque un gestionnaire, l'action spécifiée par le gestionnaire exécute. Cette action est une instruction SQL, qui peut être une instruction composée. Si l'action du gestionnaire se termine avec succès, alors l'effet de gestionnaire est exécuté. Ce qui suit est une liste des trois effets possibles de gestionnaire:

  • CONTINUER: Continuer l'exécution immédiatement après l'instruction qui a causé le gestionnaire à être invoquée.

  • SORTIE: Continuer l'exécution après la déclaration de composé qui contient le gestionnaire.

  • UNDO: Annuler le travail des déclarations antérieures à la déclaration de composé, puis continuer l'exécution après la déclaration qui contient le gestionnaire.

Si le gestionnaire peut corriger le problème que invoqué le gestionnaire, le CONTINUER effet peut être approprié. La SORTIE effet peut être approprié si le gestionnaire n'a pas résoudre le problème, mais les modifications apportées à l'instruction composée ne doit pas être annulée. La UNDO effet est appropriée si vous voulez retourner la base de données à l'état où il était avant l'instruction composée commencé l'exécution.

Prenons l'exemple suivant:

BEGIN ATOMICDECLARE constraint_violation CONDITIONFOR SQLSTATE VALEUR '23000' -DECLARE UNDO HANDLERFOR constraint_violationRESIGNAL -INSERER EN étudiants (StudentID, Fname, Lname) VALUES (: sid,: sfname,: slname) -INSERER EN liste VALUES (ClassID, classe, StudentID) (: cid,: cname,: sid) -END -

Si l'un des INSERT déclarations provoque une violation de contrainte, comme essayer d'ajouter un enregistrement avec une clé primaire qui duplique une clé primaire déjà dans la table, SQLSTATE prend une valeur de '23000', ouvrant ainsi la constraint_violation condition à une vraie valeur.

Cette action provoque le gestionnaire de UNDO les modifications qui ont été apportées à toutes les tables soit par INSERT commande. La RESIGNAL les transferts du compte le contrôle à la procédure qui a appelé la procédure en cours d'exécution.

Si les deux INSERT déclarations exécuter avec succès, l'exécution continue avec l'énoncé suivant la FIN mot-clé.

La ATOMIQUE mot-clé est obligatoire lorsque l'effet d'un gestionnaire est UNDO. Cela ne veut pas le cas pour les gestionnaires dont l'effet est soit CONTINUER ou SORTIE.


» » » » Comment gérer les conditions de SQL