0% ont trouvé ce document utile (0 vote)
21 vues77 pages

Gestion des bases de données II

Transféré par

Manelle Bouyahyi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
21 vues77 pages

Gestion des bases de données II

Transféré par

Manelle Bouyahyi
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPTX, PDF, TXT ou lisez en ligne sur Scribd

SYSTÈME DE GESTION DE BASES

DE DONNÉES II
SOMMAIRE
1. NOTIONS EN TRANSACT SQL.

2. PROGRAMMATION DES PROCEDURES


STOCKEES

3. PROGRAMMATION DES FONCTIONS

4. PROGRAMMATION DES CURSEURS

5. PROGRAMMATION DES DECLENCHEURS


(TRIGGERS )

2
1. Notions de Transact Sql
En plus des instructions SQL classiques, Transact-SQL met à la disposition des
programmeurs un grand nombre d'instructions complémentaires pour :
 Les variables
 Structures alternatives
 Structures répétitives
 Affichage de messages d’erreurs
Base de données exemple :

3
Les variables
 Déclaration
syntaxe : Declare @Nom_Variable Type_Donnée
 Exemples :
 Declare @a int
 Declare @b nvarchar(10)

 Affectation d’une valeur à une variable


 Syntaxe :
 Select @Nom_Variable = valeur
 Select @Nom_Variable = (Select ...from...Where)
ou
 Set @Nom_Variable =valeur
 Set @Nom_Variable = (Select ...from...Where)

4
Les variables suite
Exemples :
Select @a=1
-- Affecte la valeur 1 à la variable @a
Select @a=(Select count(NumArt) from Article)
-- Affecte le nombre d'articles enregistrés dans la table
article à la variable @a
Select @b='Table pour ordinateur'
-- Affecte la valeur 'Table pour ordinateur' à la variable
@b

5
Les variables : L’affichage d’information
 Syntaxe :
 Print Elément_A_Afficher
 Exemples :

Soient @a et @b des variables de type Chaîne de caractères, @c et @d des


variables de type entier
Print 'Bonjour' -- Affiche le texte Bonjour
Print @a -- Affiche la valeur de @a
Print @c -- Affiche la valeur de @c
Print @c + @d -- Affiche la somme des variables @c et @d
Print convert(varchar, @c) + @b -- Affiche la valeur de @c concaténé
avec la valeur de @b mais puisque @c est de type numérique et qu'on
ne peut jamais concaténer une valeur numérique avec une valeur chaîne
de caractères, il faut passer par une fonction de conversion dont la
syntaxe est la suivante :
 Convert (Type de conversion, Valeur à convertir)
 Rque : L'instruction return arrête l'exécution d'un programme sans condition
Structure Alternative
If...Else : Remarques :
Syntaxe :  Si une instruction Select apparaît dans la
If Condition condition, il faut la mettre entre
Begin
parenthèses
Instructions  Si dans la clause If ou Else il existe une
End seule instruction, on peut omettre le
Begin et le End
Else
Exemple :
Begin  On souhaite vérifier si le stock de l'article
Instructions portant le numéro 10 a atteint son seuil
minimum. Si c'est le cas afficher le
End message 'Rupture de stock' sinon 'stock
disponible'

7
Declare @QS int
Declare @SM int
Select @QS = (Select QteEnStock from article Where
NumArt =10)
Select @SM = (Select SeuilMinimum from article Where
NumArt =10)
If @QS<=@SM
Print 'Rupture de stock'
Else
Print 'Stock disponible'

8
Structure Alternative
Case : Permet d'affecter, selon une Exemple :
condition, une valeur à un champ dans
une requête Select  Afficher la liste des articles
Syntaxe : (Numéro, Désignation et
Case prix) avec en plus une
When Condition1 Then Résultat 1 colonne Observation qui
When Condition2 Then Résultat 2 affiche 'Non Disponible' si
... la quantité en stock est
Else Résultat N égale à 0, 'Disponible' si la
End quantité en stock est
supérieure au stock
Minimum et 'à commander'
sinon :
Select NumArt, DesArt, PUArt, 'Observation' =
Case
When QteEnStock=0 then 'Non Disponible'
When QteEnStock>SeuilMinimum then 'Disponible'
Else 'à Commander'
End
From Article

10
TP 01
1. Ecrire un programme qui calcule le montant de la commande numéro 10 et affiche un
message 'Commande Normale' ou 'Commande Spéciale' selon que le montant est
inférieur ou supérieur à 100000 DH
2. Ecrire un programme qui supprime l'article numéro 8 de la commande numéro 5 et met à
jour le stock. Si après la suppression de cet article, la commande numéro 5 n'a plus
d'articles associés, la supprimer.
3. Ecrire un programme qui affiche la liste des commandes et indique pour chaque
commande dans une colonne Type s'il s'agit d'une commande normale (montant
<=100000 DH) ou d'une commande spéciale (montant > 100000 DH)
4. A supposer que toutes les commandes ont des montants différents, écrire un programme
qui stocke dans une nouvelle table temporaire les 5 meilleures commandes (ayant le
montant le plus élevé) classées par montant décroissant (la table à créer aura la structure
suivante : NumCom, DatCom, MontantCom)
5. Ecrire un programme qui :
 Recherche le numéro de commande le plus élevé dans la table commande et l'incrémente de 1
 Enregistre une commande avec ce numéro
 Pour chaque article dont la quantité en stock est inférieure ou égale au seuil
 minimum enregistre une ligne de commande avec le numéro calculé et une quantité commandée
11
égale au triple du seuil minimum
Structure répétitive
Syntaxe : Remarques :
While Condition • Le mot clé Break est utilisé
Begin dans une boucle While pour
instructions forcer l'arrêt de la Boucle
End • Le mot clé Continue est
utilisé dans une boucle While
pour annuler l'itération en
cours et passer aux
itérations suivantes
(renvoyer le programme à la
ligne du while)

12
Structure répétitive
Exemple :
 Tant que la moyenne des prix des articles n'a pas encore
atteint 20 DH et le prix le plus élevé pour un article n'a pas
encore atteint 30 DH, augmenter les prix de 10% et afficher
après chaque modification effectuée la liste des articles.
Une fois toutes les modifications effectuées, afficher la
moyenne des prix et le prix le plus élevé :

13
While ((Select avg(puart) from article)<20) and (select max(puart)
from article) <30)
Begin
Update article Set puart=puart+(puart*10)/100
Select * from article
End
Select avg(puart) as moyenne , max(puart) as [Prix élevé] from article

14
2. Programmation Des Procédures
Stockées
 Une procédure stockée (Stored Procedure pour SQL Server)
est une suite d’instructions SQL stockées dans la base de
données et pouvant être exécutée par appel de son nom
avec ou sans paramètre.

 Les procédures stockées sont des programmes créés et exécutés du côté


serveur. Elles sont destinées à être appelées par un ou plusieurs clients
de la base de données et sont très importantes pour plusieurs raisons :
• Elles sont pré-compilées à la création et donc l'utilisation d'une
procédure stockée garantit un temps de réponse plus rapide et une
meilleure performance système ;
• Elles évitent de réécrire plusieurs fois les mêmes instructions ;

15
• Elles soulagent les applications client en répartissant des
traitements entre le client et le serveur ;
• Elles soulagent le réseau puisque seule l'instruction
d'exécution de la procédure stockée sera envoyée à travers
le réseau ;
• Il est possible de donner aux utilisateurs le droit d'exécuter
une procédure stockée sans qu'ils aient le droit sur les
objets qu'elle manipule

16
REMARQUES

 Une procédure stockée est également appelée procédure cataloguée ou


procédure mémorisée ;
 Une fois validée le nom de la procédure stockée apparaît dans la liste
des objets procédures stockée de la base de données ;

17
Programmation Des Procédures
Stockées Sans paramètres
 La programmation d'une procédure stockée diffère selon que cette procédure ne
reçoit aucun paramètre, reçoit des paramètres en entrée, renvoie des paramètres
de sortie ou retourne une valeur.
1. Sans paramètres : Laprocédure stockée exécute un traitement
donné mais ce traitement ne dépend d'aucune valeur
Syntaxe :
 Create Procedure [proc ]Nom_Procédure as
Instructions

 Exécution :
Exec Nom_Procedure

18
1. Créer une procédure stockée nommée PS_Articles qui affiche
la liste des articles avec pour chaque article le numéro et la
désignation :
Create Procedure PS_Articles as
Select NumArt, DesArt from Article
 Exécuter cette procédure :
Exec PS_Articles
2. Créer une procédure stockée qui calcule le nombre d'articles
par commande
Create Procedure SP_NbrArticlesParCommande as
Select [Link], DatCom, Count(NumArt)
From Commande, LigneCommande
Where [Link]=[Link]
Group by [Link], DatCom

19
Programmation Des Procédures Stockées avec
paramètres en entrée
 Avec des paramètres en entrée : La procédure stockée
en fonction de valeurs provenant de l'extérieur va
effectuer certains traitements
 Syntaxe :
Create Procedure Nom_Procedure
@Nom_Param1_Entrée Type_Donnée = Valeur_Par_Defaut,
@Nom_Param2_Entrée Type_Donnée = Valeur_Par_Defaut…
As Instructions
 Exécution :
Exec Nom_Procedure Valeur_Param1, Valeur_Param2...
ou
Exec Nom_Procedure @Nom_Param1 = Valeur_Param1,
@Nom_Param2 = Valeur_Param2...

20
 Exemples :
Create Proc Factoriel @n int
as
begin
declare @f int, @i int
select @f=1, @i=1
while (@i<=@n)
begin
set @f=@f*@i
set @i=@i+1
end
select @n as "N", @f as "Factoriel de N"
End
21
Go
Appel d’une Procédure
Stockée
Exec Factoriel 4
Go
ou
Exec Factoriel @n=4
Go

22
 Exemples :
1. Créer une procédure stockée nommée PS_ListeArticles qui
affiche la liste des articles d'une commande dont le numéro est
donné en paramètre :
 Create Procedure PS_ListeArticles @NumCom int as
Select [Link], NomArt, PUArt, QteCommandee
From Article A, LigneCommande LC
Where [Link]=[Link] and [Link]=@NumCom

23
 Exécuter cette procédure pour afficher la liste des articles de la commande
numéro 1 :
 Exec PS_ListeArticles 1
Ou
Declare @nc int
Set @nc=1
Exec PS_ListeArticles @nc
2. Créer une procédure stockée nommée PS_ComPeriode qui affiche
la liste des commandes effectuées entre deux dates données en
paramètres :
 Create Procedure PS_ComPeriode
 @DateD DateTime, @DateF DateTime as
Select * from Commande Where datcom between @dateD and @DateF

24
Exécuter cette procédure pour afficher la liste des commandes
effectuées entre le 10/10/2006 et le 14/12/2006 :
 Exec SP_ComPeriode '10/10/2006', '14/12/2006‘
Ou
 Declare @dd DateTime, @df DateTime
Set @dd='10/10/2006'
Set @df='14/12/2006'
Exec SP_ComPeriode @dd, @df

25
3. Créer une procédure stockée nommée PS_TypeComPeriode qui
affiche la liste des commandes effectuées entre deux dates passées
en paramètres. En plus si le nombre de ces commandes est
supérieur à 100, afficher 'Période rouge'. Si le nombre de ces
commandes est entre 50 et 100 afficher 'Période jaune' sinon
afficher 'Période blanche' (exploiter la procédure précédente) :

26
Create Procedure SP_TypeComPeriode @DateD DateTime,
@DateF DateTime as
Exec SP_ComPeriode @DateD, @DateF
Declare @nbr int
Set @nbr=(Select count(NumCom) from Commande Where
datcom between @dateD and @DateF)
If @nbr >100
Print 'Période Rouge'
Else
Begin
If @nbr<50
Print 'Période blanche'
Else
Print 'Période Jaune'
27
End
Programmation Des Procédures Stockées avec
paramètres en sortie

 Avec des paramètres en sortie : La procédure stockée suite à un traitement


réalisé va attribuer des valeurs à des paramètres en sortie. Les valeurs de
ces paramètres peuvent être récupérées par des applications clientes.
 Remarque : Les procédures utilisant des paramètres de sortie peuvent
avoir ou ne pas avoir (selon le besoin) des paramètres en entrée
 Syntaxe :
Create Procedure Nom_Procedure
@Nom_Param1_Entrée Type_Donnée = Valeur_Par_Defaut,
@Nom_Param2_Entrée Type_Donnée = ValeurParDefaut,…
@Nom_Param1_Sortie Type_Donnée Output,
@Nom_Param2_Sortie Type_Donnée Output...
as
Instructions
28
 Exécution :
Declare @Var_Param1_Sortie Type_Param1_Sortie
Declare @Var_Param2_Sortie Type_Param2_Sortie
...
Exec Nom_Procedure Val_Param1_Entrée, Val_Param2_Entrée...,
@Var_Param1_Sortie Output, @Var_Param2_Sortie Output...
OU
Exec Nom_Procedure @Nom_Param1_Entrée
=Val_Param1_Entrée, @Nom_Param2_Entrée
=Val_Param2_Entrée...,
@Nom_Param1_Sortie =@Var_Param1_Sortie Output,
@Nom_Param2_Sortie =@Var_Param2_Sortie Output...

29
 Exemples :
1. Créer une procédure stockée nommée
PS_NbrCommandes qui retourne le nombre de
commandes :
 Create Procedure PS_NbrCommandes @Nbr int output as
Set @Nbr = (Select count(NumCom) from Commande)
 Exécuter cette procédure pour afficher le nombre de
commandes :
Declare @n int
Exec PS_NbrCommandes @n Output
Print 'Le nombre de commandes : ' + convert(varchar,@n)

30
2. Créer une procédure stockée nommée PS_NbrArtCom qui retourne
le nombre d'articles d'une commande dont le numéro est donné en
paramètre :
 Exécuter cette procédure pour afficher le nombre d'articles de la
commande numéro 1
 Create Procedure SP_NbrArtCom @NumCom int, @Nbr

int output as
Set@Nbr = (Select count(NumArt) from LigneCommande
where NumCom=@NumCom)
 Declare @n int
Exec SP_NbrArtCom 1, @n Output
Print 'Le nombre d'articles de la commande numéro 1 est : ' +
convert(varchar,@n)

31
3. Créer une procédure stockée nommée
PS_TypePeriode qui retourne le type de la
période en fonction du nombre de commande.
Si le nombre de commandes est supérieur à
100, le type sera 'Période rouge'. Si le nombre
de commandes est entre 50 et 100 le type sera
'Période jaune' sinon le type sera 'Période
blanche' (exploiter la procédure
PS_NbrCommandes) :
 Exécuter cette procédure pour afficher le type
de la période .

32
Create Procedure SP_TypePeriode @TypePer varchar(50)
output as
Declare @NbrCom int
Exec SP_NbrCommandes @NbrCom output
If @NbrCom >100
Set @ TypePer ='Période Rouge'
Else
Begin
If @NbrCom <50
Set @ TypePer = 'Période blanche'
Else
Set @ TypePer = 'Période Jaune'
End

33
Declare @ TypeP varchar(50)
Exec SP_NbrArtCom @ TypeP Output
Print ' le type de la période est : ' + @ TypeP

34
Programmation Des Fonctions
 Types de fonctions

Il existe deux types de fonction :


 
Le premier type permet de renvoyer une valeur
scalaire
Le deuxième type permet de renvoyer une table.

35
Programmation Des Fonctions
Scalaires
 Création de la fonction scalaire

 Syntaxe de la création d’une fonction


CREATE FUNCTION NomDeLaFonction
( paramètres )
RETURNS définition du type de la valeur retournée
AS 
BEGIN
Code de la fonction

RETURN valeur de retour
36 END
Programmation Des Fonctions
Scalaires – Exemples
Ecrire une fonction qui retourne la quantité en stock
pour un Article dont Numéro donnée en paramètre
create function QTstock(@num int) returns int
as
begin
declare @qt int;
set @qt=(select QTenStock from Article where
NumArtic=@num)
return @qt
end
37
Appel des fonctions scalaires
Lors de l’appel d’une fonction, il est nécessaire de
préciser la base et le propriétaire de cette dernière, ici:
select [Gestion stock].[Link](11)

38
 L'exemple suivant crée une fonction scalaire qui calcul le montant
d’une commande donnée.
 CREATE FUNCTION total_commande(@numcom int) RETURNS
real
AS
BEGIN
DECLARE @ret REAL
SET @ret = SELECT SUM(PU * QTE)
FROM ligne_commande c join article a on [Link] = [Link]
WHERE numcom= @numcom
RETURN @ret
END

39
Appel des fonctions scalaires
 Exemple :

 Select numcom, datecom, [Link](numcom) as


total from commande

40
Programmation Des Fonctions
table
 Création de la fonction table

 L'instruction RETURNS spécifie table comme type de


données retourné.
 La clause RETURN contient une seule instruction
SELECT entre parenthèses.
 Le corps de la fonction ne doit pas se trouver dans un
bloc BEGIN...END.

41
 Exemple :
 Les détails d’une commande donnée.
USE stock_articles
GO
CREATE FUNCTION articles_commandes
(@numcom int)
RETURNS TABLE
AS
RETURN (SELECT [Link],desart, PU, qtecom, (PU *
qtecom) montant FROM ligne_commande lc join article a
on [Link] = [Link]
WHERE numcom = @numcom )
 Appel des fonctions tables
 Select numart, PU, qtecom,montant from dbo.aricles_commandes

42
LES CURSEURS
 Les curseurs sont des mécanismes de mémoire tampons permettant
d’accéder aux données renvoyées par une requête et donc de parcourir
les lignes de résultat.
 Les curseurs permettent de réaliser des traitements itératifs sur des jeux
de
résultats, comme le balayage d’une table, enregistrement par
enregistrement, en lecture seul.
 Syntaxe transact sql de déclaration des curseurs
DECLARE nom_curseur CURSOR

FOR instruction select

43
LES CURSEURS
 Ouverture du curseur : OPEN nomc
 Récupérer les valeurs actuelles contenues dans le curseur :
 FETCH nomc into @var1,@var2, ……..

Ou FETCH next FROM nomc into @var1,@var2, ……..


 Aller à la première ligne :
 FETCH first FROM nomc into @var1,@var2, ……..
 Aller à la dernière ligne :
 FETCH last FROM nomc into @var1,@var2, ……..
 Aller à la ligne précedente:
 FETCH prior FROM nomc into @var1,@var2, ……..
 Aller à la ligne n:
 FETCH absolute n FROM nomc into @var1,@var2, ……..
 Aller à n ligne plus loin que l’actuelle :
44  FETCH next FROM nomc into @var1,@var2, ……..
LES CURSEURS
 @@fetch_status

 Renvoie l'état de la dernière instruction FETCH effectuée sur un curseur


actuellement ouvert par la connexion.
 Valeurs renvoyées par l’instruction FETCH
 0 : L'instruction FETCH a réussi.
 -1 : L'instruction FETCH a échoué ou la ligne se situait au-
delà du jeu de résultats.
 -2 : La ligne recherchée est manquante.

 Pour parcourir un curseur, on peut employer une boucle WHILE qui teste la valeur
de la fonction @@FETCH_STATUS qui renvoie 0 tant que l'on n'est pas à la fin.
 Fermeture et libération mémoire :
 CLOSE nomc
45  DEALLOCATE nomc
LES CURSEURS
 Exemple :
 Afficher par l’instruction print tous les noms des clients.
DECLARE @nom VARCHAR(50)
DECLARE curseur_clients CURSOR FOR
SELECT nom FROM client
OPEN curseur_clients
FETCH curseur_clients INTO @nom
WHILE @@FETCH_STATUS = 0
BEGIN
PRINT @nom
FETCH curseur_clients INTO @nom
END
CLOSE curseur_clients
DEALLOCATE curseur_clients

46
Les Exceptions

TRY...CATCH :Implémente la gestion des erreurs


pour Transact-SQL
Exemple:

47
declare @a int;
set @a=1;
BEGIN TRY
print 1/@a;
END TRY
BEGIN CATCH
print 'impos! de diviser sur zero'
END CATCH;

48
L es Transactions

49
Traitement des transactions
Une transaction est une suite d'opérations effectuées
comme une seule unité logique de travail. Une unité
logique de travail doit posséder quatre propriétés
appelées propriétés ACID (Atomicité, Consistance,
Isolation et Durabilité).
• Atomicité : succès ou échec
• Consistance : tout est fait ou rien n'est fait
• Isolation : indépendant d'autres transactions ou événements
• Durabilité : les changements, une fois traités, ne peuvent pas être
annulés

50
Syntaxes
 Début de transaction :
BEGIN TRAN[SACTION][nomtransaction]
 Validation de transaction :
COMMIT TRAN[SACTION] [nomtransaction]
 Annulation de transaction :
ROLLBACK TRAN[SACTION] [nomtransaction|nom
P.C.]
 un point de contrôle (P.C.) :
SAVE TRAN[SACTION] [nom P.C.]

51
Exemple 1 :
begin TRAN Tr1
insert into Commande values(3,'21/2/2010');
save tran Tr12
insert into Commande values(4,'21/2/2010');
rollback tran Tr12
insert into Commande values(5,'21/2/2010');
Commit Tran Tr1

52
Exemple 2 :

begin tran a
begin try
insert into Commande values(2,'21/2/2010');
commit tran a
end try
begin catch
print'impossible inserer'
rollback tran a
end catch

53
 Exemple 3 : commit tran Tr;
Begin tran Tr print 'transaction
declare @cpt real reussi';
Update Compte Set
end
solde=solde-5000 where
numclient=2; else
set @cpt=(select solde begin
from Compte where rollback tran Tr;
numclient=2);
print 'transaction
if (@cpt>=0)
annuler';
begin
end
54
select * from Compte
LES TRIGGERS
Un triggers est une Forme de règles utilisées pour renforcer l’intégrité de la
base de données, on peut dire aussi des contraintes d’intégrité personnalisés.
 - sont attachés à des tables

 - ne peuvent pas être appelés explicitement dans les applications

55
Les triggers sont déclenchés automatiquement par le
noyau SQL à chaque intervention sur la table qui les
supportent.
Un trigger est toujours associé à une table, qui
peut avoir au maximum trois triggers pour
(Insertion, modification et suppression de ligne
La suppression d’une table entraîne la destruction
de ses triggers

56
Les déclencheurs peuvent être associés à trois types
d'actions de déclenchement sur une table :
• Déclencheurs d'insertion : Se déclenchent suite à
une opération d'ajout d'enregistrements dans la table

57
• Déclencheurs de modification : Se déclenchent
suite à une opération de modification des
enregistrements de la table ;
• Déclencheurs de suppression : Se déclenchent
suite à une opération de suppression
d'enregistrements à partir de la table

58
Principe de fonctionnement.
Deux tables virtuelles(variable local temporaire dans le
programme) sont créées au moment de la MAJ des
données sur une table (INSERTED,DELETED) en
lecture seul, Elles sont destinées à contenir les lignes de
la table sur lesquelles ont été effectuées des opérations.
Les tables INSERTED et DELETED peuvent être
utilisées par le trigger pour déterminer comment le
traitement doit se dérouler. Ce traitement est à écrire par
le développeur.

59
LES TRIGGERS
 Principe de fonctionnement.
 Cas de création d’une ligne de table (insert)
 Une table virtuelle temporaire est crée au moment de l’insertion sur la table:
INSERTED
 La/les lignes nouvelles sont placées dans cette table temporaire INSERTED et
dans la table réelle; toutes les lignes de la table INSERTED apparaissent dans
la table de la base.

60
LES TRIGGERS
 Cas de suppression d’une ligne de table (delete)
 Une table virtuelle temporaire est crée au moment de la suppression sur la
table: DELETED
 La/les lignes supprimées sont placées dans la table temporaire DELETED et
supprimées de la table réelle; la table DELETED et les tables de la base ne
peuvent pas avoir de lignes en commun.

61
LES TRIGGERS
 Cas de modification d’une ligne de table (update)

 Deux tables virtuelles sont créées au moment de la MAJ


sur la table:
 INSERTED
 DELETED.

 La/les lignes avant modification sont placées dans la table


temporaire DELETED et la/les lignes après modification
sont placées dans la table temporaire INSERTED et dans
la table réelle.

62
LES TRIGGERS
SYNTAXE GENERALE
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
63
ou
CREATE TRIGGER nom_trigger ON nom_table
FOR INSERT, UPDATE
AS
bloc d’instruction SQL
 Suppression d’un triggers : DROP TRIGGER
nom_trigger
 Modifier un triggers : la même syntaxe de Create, en
remplassant Create par Alter

64
exemple
Exemple :
Pour implémenté la contraint: de limiter l’insertion de
clients à 3, sur la table client , on doit
utilisé le trigger suivant:

65
CREATE TRIGGER Limitclient3 ON client
FOR INSERT
AS
begin
if (select count(*) from client )>3
begin
RAISERROR('nombre limite de clients, insertion
annuler',1,15)
rollback
end
end

66
Exemple 2:
 Le trigger suivant interdit la modification des produit

Create Trigger Tr_Empêcher_Modif1 On produit


For update
As
begin
Print 'impossible de modifier '
Rollback
end

67
LES TRIGGERS
Déclencheurs AFTER : sont exécutés après l'action
associée à une instruction INSERT, UPDATE ou DELETE.
Le déclencheur AFTER est défini de la même manière que
le déclencheur FOR. Vous pouvez définir des déclencheurs
AFTER uniquement dans les tables.
Déclencheurs INSTEAD OF. sont exécutés à la place
de l'action de déclenchement habituelle. Ils peuvent
également être définis dans des vues avec une ou plusieurs
tables de base afin d'étendre les types de mises à jour
qu'une vue peut prendre en charge.

68
 Les déclencheurs INSTEAD OF :
Sont vérifiés avant les contraintes d'intégrité
associées à la table ce
qui permet de mettre en place des traitements qui
complètent les actions de ces contraintes ;

69
Exemple (Instead of):
Pour la suppression d’une Matiére:
CREATE TRIGGER Supp ON Matière NSTEAD OF
DELETE
AS
begin
Delete Form Note Where IdMat in (select idmat from
deleted)
Delete From Matiere Where IdMat in (select idmat
from deleted)
end

70
Ici la suppression des notes ce passe avant la
suppression des
matières pour évité l’erreur provoqué par la
contraint d’intégrité référentiel.

71
Gestion Erreurs
L'instruction Raiserror affiche un message d'erreur
système. Ce message est créé par l'utilisateur ou
appelé à partir de la table SysMessages de la base de
données Master (table contenant la liste des messages
systèmes disponibles en SQL Server).

72
Syntaxe :
Raiserror (Texte message, gravité, état)

73
Cette fonction accepte trois arguments requis :
• Texte Message : Représente le texte du message
• un numéro qui représente le niveau de gravité de
l'erreur entre 0 et 25 Gravité : Seul l'administrateur
système peut
ajouter des messages avec un niveau de gravité
compris entre 19 et 25

74
(consulter l'aide Transact-SQL dans l'analyseur de
requêtes SQL pour le détail des niveaux de gravité)
état de l'erreur entre 1 et 127
qui identifie la source à partir
de laquelle l'erreur a été émise (consulter l'aide
Transact-SQL pour le détail sur les différents états)

75
76
77

Vous aimerez peut-être aussi