EXERCICES - TSQL Corriges
EXERCICES - TSQL Corriges
LE LANGAGE TSQL
LES DECLECNCHEURS
Exercice 1
BEGIN
FROM Compte
END IF;
END IF;
END;
BEGIN
IF (SELECT COUNT(*) FROM Compte WHERE #NumCl = NEW.#NumCl And TypeCompte = 'CC' > 0 )
OR
END IF;
END IF;
END;
2. Le déclencheur TR_SUPP_COMPTE qui interdit la suppression d'un compte dont le solde > 0.
BEGIN
SET MESSAGE_TEXT = 'La suppression du compte est interdite car le solde est supérieur à 0.';
END IF;
END;
3. Le déclencheur TR_UPDATE_COMPTE qui interdit la modification du solde des comptes auxquels sont
associées des opérations, il interdit également de changer un CE en CC (le contraire étant possible).
BEGIN
FROM Operation
SET MESSAGE_TEXT = 'La modification du solde du compte associé à des opérations est interdite.';
END IF;
END;
FROM Client
SET MESSAGE_TEXT = 'Le nouveau numéro de téléphone est déjà attribué à un autre client.';
END IF;
END;
5. Le déclencheur TR_insertion_operation QUI MET MIS A JOUR LA TABLE COMPTE POUR CHAQUE
OPERATION (RETRAIT LE SOLDE DOIT ETRE REDUIT DU MONTANT DE L’OPERATION ET VICE VERSA)
End if
END
Exercice 2
Soit La base de données dont la structure est suivante :
Styliste(NumStyliste, NomStyliste, AdrStyliste)
Costume(numCostume, DesignationCostume,# NumStyliste)
MembreJury (numMembreJury, nom, #fonction)
NotesJury(#NumCostume, #NumMembre, note)
Fonction(Fonction)
Ecrire le code MYSQL des déclencheurs suivants :
1. Le déclencheur TR_SUPPRESSION qui, à la suppression de costumes de la table Costume, vérifie si des notes
leur ont été attribuées. Si c'est le cas empêcher la suppression.
Then
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Le nouveau numéro de téléphone est déjà attribué à un autre client.';
END IF;
END
2. Le déclencheur TR_AFFECTATION_NOTE qui, à l'affectation de notes à des costumes dans la table NotesJury,
vérifie si les notes attribuées sont comprises entre 0 et 20
Then
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Le nouveau numéro de téléphone est déjà attribué à un autre client.';
END IF;
END
CREATE TRIGGER TR_AFFECTATION_NOTE BEFORE insert ON NotesJury
FOR EACH ROW
BEGIN
IF (New.note < 0 or New.note > 20)
Then
SIGNAL SQLSTATE '45000'
SET MESSAGE_TEXT = 'Le nouveau numéro de téléphone est déjà attribué à un autre client.';
END IF;
END
3. Le déclencheur TR_AJOUT_MEMBRE qui, à l'ajout de membres jury, cherche si leurs fonctions existent dans
la table Fonction si ce n'est pas le cas il rajoute ses fonctions à la table.
Then
Insert into Fonction(Function) values(New. #fonction);
END IF;
END
Exercice 3
Soit La base de données qui a la structure suivante :
Mouvement( NumMvt, Type, quantite, #codePdtFini)
ProduitFini(codePdtFini, nomPdt, qtiteStock)
Composition(#codePdtFini, #codePdtBrut,QtiteUtilise)
Fournisseur(RaisonSociale, AdrFournisseur, nbrProduitsFournis)
ProduitBrut(CodePdtBrut, NomPdtBrut, PAchat, #RaisonSociale)
Ajouter les declencheurs suivants:
1. TR_AJOUT_PDT_BRUT qui à l'ajout de produits bruts dans la table 'Produit Brut' met à jour le
champ NbrProduitsfournis pour les fournisseurs concernés
2. TR_SUPP_PDT_BRUT qui à la suppression de produits bruts dans la table 'Produit Brut' met à jour
le champ NbrProduitsfournis pour les fournisseurs concernés
3. TR_AJOUT_MVT qui à l'ajout de mouvements dans la table mouvement met à jour le stock
4. TR_SUPP_MVT qui à la suppression de mouvements dans la table mouvement met à jour le stock
5. TR_UPDATE_MVT qui à la modification de mouvements dans la table mouvement met à jour le
stock