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 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87
| CREATE PROCEDURE SupprEd
@titre VARCHAR(64),
@complément VARCHAR(128),
@V_SORTIE INT = 1 OUTPUT
AS
BEGIN
DECLARE @t_original VARCHAR(64),
@annee VARCHAR(4),
@stock INT,
@cpted INT,
@bool INT
DECLARE CurEd cursor FOR
SELECT TITRE_ORIGINAL, DATE_DE_SORTIE
FROM EDITION
WHERE TITRE = @titre AND COMPLEMENT_DE_TITRE = @complément
FOR READ ONLY
OPEN CurEd
FETCH NEXT FROM CurEd INTO @t_original, @annee
-- On teste si l'édition existe, si ce n'est pas le cas, on affiche un message d'erreur
IF(@@FETCH_STATUS != 0) PRINT 'Aucune édition de ce type.'
BEGIN
-- Tant que le curseur CURED pointe sur un élément, on effectur les opérations suivantes
WHILE @@FETCH_STATUS = 0
BEGIN
-- S'il une réservation a été faite sur l'édition, on affiche un message d'erreur
IF EXISTS
(
SELECT *
FROM RESERVATION R
WHERE R.TITRE = @titre
AND R.COMPLEMENT_DE_TITRE = @complément
)
BEGIN
PRINT 'Une réservation est prévue sur cette édition...'
SET @V_SORTIE = 0
END
-- Sinon on supprime l'édition et les stocks correspondants
ELSE
BEGIN
DECLARE CurStockAux CURSOR FOR
SELECT #STOCK
FROM STOCK
WHERE TITRE = @titre
AND COMPLEMENT_DE_TITRE = @complément
FOR READ ONLY
OPEN CurStockAux
FETCH NEXT FROM CurStockAux INTO @stock
SET @cpted = 0
WHILE @@FETCH_STATUS = 0
BEGIN
BEGIN TRAN
-- La procédure SupprStock renvoie 1 si elle s'est déroulée correctement, 0 sinon
EXECUTE SupprStock
@stock,
@V_SORTIE = @bool OUTPUT
-- Si la suppression d'un élément du stock ne s'est pas effectuée correctement (location en cours),
-- on annule la transaction.
IF @bool = 0
BEGIN
ROLLBACK TRAN
END
ELSE
BEGIN
DELETE FROM EDITION
WHERE TITRE = @titre
AND COMPLEMENT_DE_TITRE = @complément
COMMIT TRAN
END
SET @cpted = @cpted + 1
FETCH NEXT FROM CurStockAux INTO @stock
END
CLOSE CurStockAux
DEALLOCATE CurStockAux
END
PRINT 'L''édition ' + @titre + ' : ' + @complément + ' et les stocks correspondants (' + CAST(@cpted AS varchar) + ') ont été supprimés de la base.'
FETCH NEXT FROM CurEd INTO @t_original, @annee
END
CLOSE CurEd
DEALLOCATE CurEd
END
END |
Partager