1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68
| DELIMITER //
CREATE OR REPLACE PROCEDURE pi_ajout_ticket
(
INOUT id_submitter INTEGER, -- identifiant de l'utilisateur qui soumet la demande
IN firsname VARCHAR(50), -- Prénom de l'utilisateur
IN lastname VARCHAR(50), -- Nom de l'utilisateur
IN objet TEXT, -- Objet du ticket
OUT id_ticket INTEGER -- identifiant du ticket
)
/************************************************************************************************
Base : pef
Objet : Procédure
Auteur : Philippe Leménager
Version : V 0.1 - plemenager - 2021-07-05 - Création
Description : Procédure d'ajout d'un ticket avec contrôle de l'existence du submitter
Utilise : US_user, TI_ticket
Historique :
*************************************************************************************************/
BEGIN
DECLARE ctr_exception CONDITION FOR SQLSTATE '23000'; -- Erreur de contrainte
DECLARE EXIT HANDLER FOR ctr_exception
BEGIN
GET DIAGNOSTICS @nb_errors = NUMBER;
GET DIAGNOSTICS CONDITION @nb_errors
@errno = MYSQL_ERRNO, @text = MESSAGE_TEXT;
IF LOCATE('fk_US_ident_SBM', @text) > 0 THEN
SET @errno = 10019;
SET @text = 'Identifiant du submitter inconnu';
END IF;
SIGNAL SQLSTATE VALUE '23000'
SET MYSQL_ERRNO = @errno, MESSAGE_TEXT = @text;
END;
-- Vérification de l'existence du submitter et création éventuelle
IF id_submitter IS NULL OR id_submitter < 1 THEN
-- id_submitter non fourni => on cherche avec le nom et le prénom
IF firstname IS NULL OR CHAR_LENGHT(firstname) < 1
OR lastname IS NULL OR CHAR_LENGTH(lastname) < 1 THEN
-- Identité non fournie => Erreur
SIGNAL SQLSTATE VALUE '45000'
SET MYSQL_ERRNO = 10001, MESSAGE_TEXT = 'Identifiant ou identité du submiter non fourni !';
ELSE
-- Recherche du submitter par son nom et son prénom
SELECT US_ident INTO id_submitter
FROM US_user
WHERE US_firstname = firstname
AND US_lastname = lastname;
IF id_submitter IS NULL OR id_submitter < 1 THEN
-- Submitter non trouvé => on le crée
INSERT INTO US_user (US_firstname, US_lastname)
VALUES (firsname, lastname);
SET id_submitter = LAST_INSERT_ID();
END IF;
END IF;
END IF;
-- Création du ticket
INSERT INTO TI_ticket(US_ident_SBM, TI_objet)
VALUES (id_submitter, objet);
SET id_ticket = LAST_INSERT_ID();
END; //
DELIMITER ; |
Partager