Gestionnaires d'erreurs, curseurs et utilisation
avancée
Dans ce chapitre, nous verrons tout d'abord deux structures utilisables dans les blocs d'instructions et qui vont vous ouvrir
d'énormes possibilités :
les gestionnaires d'erreur, qui permettent de gérer les cas où une erreur se produirait pendant l'exécution d'une série
d'instructions ;
les curseurs, qui permettent de parcourir les lignes de résultat d'une requête SELECT.
Ensuite, nous verrons quelques cas d'utilisation avancée des blocs d'instructions, utilisant non seulement les structures décrites
dans ce chapitre et le précédent, mais également d'autres notions et objets (transaction, variables utilisateur, etc.).
Gestion des erreurs
Il arrive régulièrement qu'un traitement soit susceptible de générer une erreur SQL. Prenons la procédure suivante, qui enregistre
une adoption :
Code : SQL
DELIMITER |
CREATE PROCEDURE ajouter_adoption(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);
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 'Adoption correctement ajoutée' AS message;
END|
DELIMITER ;
Plusieurs erreurs sont susceptibles de se déclencher selon les paramètres passés à cette procédure.
Exemple 1 : le client n'existe pas.
Code : SQL
SET @date_adoption = CURRENT_DATE() + INTERVAL 7 DAY;
CALL ajouter_adoption(18, 6, @date_adoption, 1);
Code : Console
ERROR 1452 (23000): Cannot add or update a child row: a foreign key constraint fails (`el
Exemple 2 : l'animal a déjà été adopté.
Partie 5 : Sécuriser et automatiser ses actions
294/414
www.openclassrooms.com
Précédent

- 294/413

Suivant