Vous êtes sur la page 1sur 2

*************************************************Gestion des

exceptions :***********************************************************************
***************
5)Créez une procédure stockée qui gère les exceptions pour
le cas où un employé spécifié n'existe pas dans la base de données.
----------------------------------------------------------
CREATE PROCEDURE GetEmployeeInfo (
IN p_employee_id INT, --est le paramètre d'entrée spécifiant
l'identifiant de l'employé dont nous voulons récupérer les informations.
OUT p_employee_name VARCHAR(100), --sont les paramètres de sortie qui
contiendront respectivement le nom et le salaire de l'employé.
OUT p_employee_salary DECIMAL(10,2),--
OUT p_error_message VARCHAR(255) --est le paramètre de sortie qui contiendra
un message d'erreur en cas d'erreur.
)
LANGUAGE SQL
BEGIN
DECLARE v_employee_name VARCHAR(100);
DECLARE v_employee_salary DECIMAL(10,2);
DECLARE SQLSTATE CHAR(5);

-- Déclaration de l'erreur personnalisée


DECLARE CONTINUE HANDLER FOR NOT FOUND --Nous déclarons un gestionnaire
d'erreur (HANDLER) pour gérer l'exception "NOT FOUND",
SET p_error_message = 'Employee not found.'; qui se produit lorsque
l'employé spécifié n'existe pas dans la base de données.

-- Sélectionner le nom et le salaire de l'employé en fonction de l'ID


SELECT name, salary INTO v_employee_name, v_employee_salary
FROM employees
WHERE employee_id = p_employee_id;

-- Affectation des valeurs de sortie


SET p_employee_name = v_employee_name; --Si l'employé est trouvé avec
succès, ses informations sont récupérées
SET p_employee_salary = v_employee_salary; et assignées aux paramètres de
sortie correspondants.
SET p_error_message = 'Success';

-- Gestion de l'exception
EXCEPTION
WHEN NOT FOUND THEN --Si l'employé n'est pas
trouvé, un message d'erreur approprié est assigné à p_error_message.
SET p_error_message = 'Employee not found.';
END

*************************************************Transactions :********************
******************************************************************
6)Écrivez une procédure stockée qui insère un nouvel employé dans la base de
données
et met à jour les données de plusieurs tables en une seule transaction.
----------------------------------------------------------
CREATE PROCEDURE InsertAndUpdateEmployee (
IN p_employee_name VARCHAR(100),
IN p_employee_salary DECIMAL(10,2),
IN p_department_id INT,
IN p_manager_id INT
)
LANGUAGE SQL
BEGIN
DECLARE v_employee_id INT;
DECLARE SQLCODE INT;
DECLARE SQLSTATE CHAR(5);

-- Début de la transaction
DECLARE EXIT HANDLER FOR SQLEXCEPTION, SQLWARNING
BEGIN
ROLLBACK;
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Error occurred during transaction.';
END;

-- Début de la transaction explicite


START TRANSACTION;

-- Insertion d'un nouvel employé dans la table des employés


INSERT INTO employees (name, salary, department_id, manager_id)
VALUES (p_employee_name, p_employee_salary, p_department_id, p_manager_id);

-- Récupération de l'identifiant de l'employé inséré


SET v_employee_id = IDENTITY_VAL_LOCAL();

-- Mise à jour d'autres tables en fonction de l'identifiant de l'employé


-- Exemple : mise à jour de la table des tâches attribuées à l'employé
UPDATE tasks
SET assigned_to = v_employee_id
WHERE manager_id = p_manager_id;

-- Valider la transaction
COMMIT;

END

Vous aimerez peut-être aussi