Table des matières:
- Déclarations de gestionnaire
- Si une condition appelle un gestionnaire, l'action spécifiée par le gestionnaire s'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, l'effet du gestionnaire s'exécute.Voici une liste des trois effets de gestionnaire possibles:
Vidéo: Tutoriel SQL Server : Gérer la mémoire | video2brain.com 2025
Vous pouvez faire en sorte que votre programme regarde SQLSTATE après l'exécution de chaque instruction SQL. Il y a plusieurs possibilités pour ce que vous pourriez vouloir faire ensuite. Que faites-vous avec les connaissances que vous gagnez?
-
Si vous trouvez un code de classe 00 , vous ne voulez probablement rien faire. Vous souhaitez que l'exécution se déroule comme prévu.
-
Si vous trouvez un code de classe 01 ou 02 , vous voudrez peut-être prendre des mesures spéciales. Si vous vous attendiez à l'indication "Avertissement" ou "Introuvable", vous souhaiterez probablement laisser l'exécution se poursuivre. Si vous ne vous attendiez pas à l'un ou l'autre de ces codes de classe, vous souhaiterez probablement avoir une branche d'exécution vers une procédure spécifiquement conçue pour gérer le résultat inattendu, mais pas totalement imprévu, d'avertissement ou non trouvé.
-
Si vous recevez un autre code de classe, quelque chose ne va pas. Vous devriez passer à une procédure de gestion des exceptions. La procédure à laquelle vous choisissez de vous connecter dépend du contenu des trois caractères de la sous-classe, ainsi que des deux caractères de classe de SQLSTATE. Si plusieurs exceptions différentes sont possibles, il devrait y avoir une procédure de gestion des exceptions pour chacune d'entre elles, car différentes exceptions nécessitent souvent des réponses différentes.
Vous pourrez peut-être corriger certaines erreurs ou trouver des solutions. D'autres erreurs peuvent être fatales. personne ne mourra, mais vous devrez peut-être terminer la demande.
Déclarations de gestionnaire
Vous pouvez placer un gestionnaire de conditions dans une instruction composée. Pour créer un gestionnaire de condition, vous devez d'abord déclarer la condition qu'il va gérer. La condition déclarée peut être une sorte d'exception, ou juste quelque chose qui est vrai. Voici quelques conditions possibles.
Condition | Description |
---|---|
SQLSTATE VALUE
'xxyyy' |
Valeur SQLSTATE spécifique |
SQLEXCEPTION | Classe SQLSTATE autre que 00, 01 ou 02 > SQLWARNING |
classe SQLSTATE 01 | NOT FOUND |
classe SQLSTATE 02 | Voici un exemple de déclaration de condition: |
BEGIN DECLARE constraint_violation CONDITION POUR SQLSTATE VALUE '23000'; FIN;
Cet exemple n'est pas réaliste, car généralement l'instruction SQL qui peut provoquer l'apparition de la condition, ainsi que le gestionnaire qui serait appelé si la condition s'est produite, est également incluse dans la structure BEGIN … END.
Actions du gestionnaire et effets du gestionnaire
Si une condition appelle un gestionnaire, l'action spécifiée par le gestionnaire s'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, l'effet du gestionnaire s'exécute.Voici une liste des trois effets de gestionnaire possibles:
CONTINUE: Poursuite de l'exécution immédiatement après l'instruction qui a provoqué l'appel du gestionnaire.
-
-
ANNULER: Annule le travail des instructions précédentes dans l'instruction composée, puis continue l'exécution après l'instruction contenant le gestionnaire.
-
Si le gestionnaire peut corriger tout problème invoqué par le gestionnaire, l'effet CONTINUER peut être approprié. L'effet EXIT peut être approprié si le gestionnaire n'a pas résolu le problème, mais les modifications apportées à l'instruction composée n'ont pas besoin d'être annulées. L'effet UNDO est approprié si vous souhaitez renvoyer la base de données à l'état dans lequel elle se trouvait avant l'exécution de l'instruction compound.
BEGIN ATOMIC DECLARE constraint_violation CONDITION pour SQLSTATE VALUE '23000'; DECLARE UNDO HANDLER POUR contrainte_violation RESIGNAL; REPLACE INTO students (StudentID, Fname, Lname) VALEURS (: sid,: sfname,: slname); REPLACE INTO roster (ClassID, Class, StudentID) VALEURS (: cid,: cname,: sid); FIN;
Si l'une des instructions INSERT 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 suppose une valeur de '23000', définissant ainsi la condition constraint_violation une vraie valeur.
Si les deux instructions INSERT s'exécutent avec succès, l'exécution se poursuit avec l'instruction suivant le mot-clé END.
Le mot-clé ATOMIC est obligatoire chaque fois que l'effet d'un gestionnaire est UNDO. Ce n'est pas le cas pour les gestionnaires dont l'effet est CONTINUE ou EXIT.
