Skip to main content

Triggers

Attention, ceci est uniquement valable in SQL Server

-- On donne un nom à la trigger et on lui dit sur quelle table il opère 
-- Ici le trigger opère sur la table "offre"
CREATE TRIGGER date_offre_posterieure_date_vente ON offre

-- On lui dit l'action pour laquelle il doit s'exécuter (ici après un insert)
-- On pourrait aussi avoir "after delete" ou "after update"
AFTER INSERT 

AS BEGIN 
	-- On déclare les variables avec leur types
	-- Ces déclarations doivent toujours être au début du trigger
	declare @dateOffre SMALLDATETIME 
	declare @idBien INTEGER
	declare @dateMiseVente SMALLDATETIME
	
	-- "inserted" est une table temporaire qui renvois le tuple inséré
	-- On pourrait aussi avoir "deleted" à la place de inserted, et dans le cas d'un UPDATE 
	-- On a les deux (deleted et inserted)
	
	-- La syntaxe de @variable = attribut va attribuer la valeur de l'attribut du tuple 
	-- dans la variable définie plus tot
	select @idBien = id_bien, @dateOffre = date_offre from inserted
	
	-- Ensuite on peut simplement utiliser la variable n'importe où dans une query
	select @dateMiseVente = date_mise_en_vente from bien where id_bien = @idBien
	
	-- on crée une condition (dans lequel il faut annuler l'insert)
	if @dateOffre < @dateMiseVente
	begin
		-- on génère une erreur
		raiserror('La date de l''offre doit être postérieur à la date de la mise en vente.', 7, 1)
		-- On annule l'insert
		rollback transaction
		-- On met fin à la trigger
		return 
	end
    
    -- si la condition ne corresponds aps, alors l'insert est bien inséré
END