Conditions prédéfinies
Il existe trois conditions prédéfinies dans MySQL :
SQLWARNING : tous les identifiants SQL commençant par '01', c'est-à-dire les avertissements et les notes ;
NOT FOUND : tous les identifiants SQL commençant par '02', et que nous verrons plus en détail avec les curseurs ;
SQLEXCEPTION : tous les identifiants SQL ne commençant ni par '00', ni par '01', ni par '02', donc les erreurs.
Exemple : réécriture de la procédure ajouter_adoption_exit(), de façon à ce que le gestionnaire intercepte toutes les erreurs
SQL.
Code : SQL
DROP PROCEDURE ajouter_adoption_exit;
DELIMITER |
CREATE PROCEDURE ajouter_adoption_exit(IN p_client_id INT, IN
p_animal_id INT, IN p_date DATE, IN p_paye TINYINT)
BEGIN
DECLARE v_prix DECIMAL(7,2);
DECLARE EXIT HANDLER FOR SQLEXCEPTION
BEGIN
SELECT 'Une erreur est survenue...';
SELECT 'Arrêt prématuré de la procédure';
END;
SELECT 'Début procédure';
SELECT COALESCE(Race.prix, Espece.prix) INTO v_prix
FROM Animal
INNER JOIN Espece ON Espece.id = Animal.espece_id
LEFT JOIN Race ON Race.id = Animal.race_id
WHERE Animal.id = p_animal_id;
INSERT INTO Adoption (animal_id, client_id, date_reservation,
date_adoption, prix, paye)
VALUES (p_animal_id, p_client_id, CURRENT_DATE(), p_date,
v_prix, p_paye);
SELECT 'Fin procédure';
END|
DELIMITER ;
Déclarer plusieurs gestionnaires, gérer plusieurs erreurs par gestionnaire
Un gestionnaire peut reconnaître plusieurs types d'erreurs différents. Par ailleurs, il est possible de déclarer plusieurs
gestionnaires dans un même bloc d'instructions.
Exemple : toujours avec la procédure ajouter_adoption_exit(). On peut l'écrire en détaillant différentes erreurs possibles, puis
en ajoutant un gestionnaire général qui reconnaîtra les SQLEXCEPTION et les SQLWARNING, pour tous les cas qu'on ne traite
pas dans les autres gestionnaires. Ce qui donne :
Code : SQL
DROP PROCEDURE ajouter_adoption_exit;
DELIMITER |
CREATE PROCEDURE ajouter_adoption_exit(IN p_client_id INT, IN
p_animal_id INT, IN p_date DATE, IN p_paye TINYINT)
BEGIN
DECLARE v_prix DECIMAL(7,2);
Partie 5 : Sécuriser et automatiser ses actions
299/414
www.openclassrooms.com
Précédent

- 299/413

Suivant