Triggers VF

Télécharger au format pdf ou txt
Télécharger au format pdf ou txt
Vous êtes sur la page 1sur 31

TRANSACTION-CURSSEURS

ET TRIGGERS
PLAN

▪ Les transactions
▪ les curseurs
▪ les triggers
TRANSACTIONS
SYNTAXE
EXEMPLE 1

Table Passe_ex (id, controle,exam)


EXEMPLE 2
Vous supprimer l’enregistrement dont le numéro est 6 et
vous exécutez la transaction suivante :
Qu’est ce que vous remarquez ?
Maintenant vous réinsérez l’enregistrement suivant

Et vous réexécutez la transaction précédente.

Qu’est ce que vous remarquez ?


LES CURSEURS
CURSEURS
SYNTAXE
ARGUMENTS
EXEMPLE Auditeur (NuAud int, nom varchar(20))
LES CURSEURS (SCROLL)
Syntaxe
EXEMPLE
TRIGGERS
SYNTAXE

CREATE TRIGGER nom_trigger ON nom_table FOR INSERT


AS
bloc d’instruction SQL

CREATE TRIGGER nom_trigger ON nom_table FOR UPDATE


AS
bloc d’instruction SQL

CREATE TRIGGER nom_trigger ON nom_table FOR DELETE


AS
bloc d’instruction SQL
OU

CREATE TRIGGER nom_trigger ON nom_table FOR INSERT, UPDATE

AS

bloc d’instruction SQL


SUPPRESSION D’UN TRIGGERS

DROP TRIGGER nom_trigger


MODIFICATION D’UN TRIGGERS

Alter TRIGGER nom_trigger On Nom_Table


For Opération1, Opération2...

As
Nouvelles Instructions
EXEMPLE 1:

Soit le schéma relationnel (GestStg) suivant:

• Stagiaire (IdStg, Nom)

• Matiere (IdMat, Libelle)

• Note (idnote, IdStg, IdMat, Note)

1. Implementer la contrainte suivante sur la base GestStg:

Empêcher, pour un stagiaire par matière, la saisie d’une note qui existe déja.

Autrement dit : Chaque stagiaire doit avoir une seule note par matière.
CREATE TRIGGER LimitNote ON note FOR INSERT

AS
begin
If existe (select idstg, idmat, note from note where note,idstg= inserted,idstg and
note.idmat= inserted,idmat)
begin
RAISERROR(note existe déja‘,15,1)
rollback tran
end
end
Go
EXERCICE

Soit le schéma relationnel (GestStg) suivant:

• Stagiaire (IdStg, Nom)

• Matiere (IdMat, Libelle)

• Note (idnote, IdStg, IdMat, Note)

• Implementer la contrainte suivante sur la base GestStg:

Empêcher, pour un stagiaire par matière, la saisie d’une note qui est superieur à 20
INSERTED - DELETED

Les triggers utilisent les tables intermédiaires (Inserted-Deleted)


Inserted: Nouveaux élement à inserer
Deleted: L'élement qui sera supprimée
Evénement/type Inserted of for
Insert -inserted(Les données qui sera inseres) -Inserted (Les nouvelle données)
(Table réels) (Table réels)

Update -inserted (Nouvelle) -inserted (Nouvelle)


-deleted (Ancienne) -Deleted (Ancienne)
-Réels (Ancienne) -Réels(Nouvelle)

Delete -Deleted(Les données qui sera supprimer) -Deleted(les données à supprimer)


(Table réels) (Table réels)
EXEMPLE 2:

• Soit la table suivante : Commande (numCom, datCom)

• Vous insérer quatre enregistrements dans la table commande.

• Vous créer le trigger suivant qui interdit la modification du numéro de commande et


vérifie si la date saisie pour la date de commande est supérieure ou égale à
la date du jour.
Create Trigger Tr_Empêcher_Modif_Numcom On Commande For Update
As
if update(NumCom)
Begin
Raiserror('le numéro de commande ne peut être modifié',15,120)
Rollback
End
if update(DatCom)
Begin
if ((select count (DatCom) from inserted Where datediff(day,datcom,getdate()
)>0)<> 0)
Begin
Raiserror('La date de commande ne peut pas être inférieur à la date en
cours',15,120)
Rollback
End
End
EXEMPLE 3:

Le trigger suivant empêche la suppression des commandes ayant des articles associés

Remarque : Ce trigger ne se déclenchera pas s'il existe une contrainte clé


étrangère entre le champ NumCom de la table ligneCommande et le champ
NumCom de la table commande.
Create Trigger Tr_Empêcher_Suppr On Commande For Delete
As
Declare @a int
set @a =(Select count(numart) from lignecommande, deleted
where lignecommande.numcom =deleted.numcom)
if (@a>0)
Begin
Raiserror('Opération annulée. Une ou plusieurs commandes ont des articles

enregistrés',15,120)
Rollback
End

Vous aimerez peut-être aussi