Académique Documents
Professionnel Documents
Culture Documents
exercise 1.
Ecrire une fonction PLSQL qui prend en paramètre un nom d’employé et renvoie son salaire. Vous
devez utiliser la syntaxe suivante
CREATE OR REPLACE FUNCTION nom_fonction (nom_param in type_param)
RETURN Type_de_Retour IS
-- Déclaration de variables.
BEGIN
-- Corps de la fonction
RETURN Valeur_de_retour;
END;
/
Pour voir le résultat de votre fonction, vous pouvez utiliser la syntaxe suivante :
DECLARE
BEGIN
dbms_output.PUT_LINE(Nom_de_Fonction(Parametres,…));
END;
/
exercise 2
Sur le même principe, modifier votre fonction pour qu’elle prenne en entrée un nom et qu’elle
renvoie le message suivant :
« NUMERO = Valeur, POSTE = Valeur, SALAIRE = Valeur »
exercise 3
Ecrire une fonction exist_emp qui renvoie VRAI si l’employé passé en paramètre se trouve dans la
table EMP sinon elle renvoie FAUX.
exercise 4
Ecrire une fonction app_emp_dept qui affiche « cet employé appartient au département xxxxxxxxxx
» si l’employé fait bien partie du département passé en paramètre sinon affiche « cet employé
n’appartient pas au département xxxxxxxx »
exercise 5
Ecrire un programme maj_emp qui met à jour les salaires selon la nouvelle politique de la direction.
Vous devez :
- Réduire les salaires des employés du département Recherche de 200€
- Augmenter les salaires du département Développement de 40€
- Multiplier par 2 les salaires du département Direction
1
- Mettre les salaires des employés du département Facturation à la moyenne des salaires des
employés.
Trigger
Syntaxe
CREATE OR REPLACE TRIGGER Nom_Trigger{BEFORE | AFTER | INSTEAD OF}{événement LMD } ON
Nom_Table FOR EACH ROW
DECLARE
Déclaration des variables
BEGIN
Corps du programme
END;
/
Exemple de trigger qui se déclenche avant l’insertion d’une ligne dans la table EMP :
CREATE OR REPLACE TRIGGER MONTRIGGER BEFORE INSERT ON EMP FOR EACH ROW
…
Pour l’utilisation des triggers nous avons souvent besoin de la valeur de la colonne avant
modification « :OLD » et la valeur qui va être modifiée ou insérée « :NEW »
Exemple :
Avant le renommage de l’employé BARTH en SUPERBARTH :
:NEW.NOMEMP vaut SUPERBARTH et :OLD.NOMEMP vaut BARTH.
exercise 6
Ecrire un trigger sur la table DEPT qui préfixe le nom du département par « DEPT_ » inséré dans la
table. Le trigger se déclenchera avant l’insertion d’une ligne.
Par exemple :
INSERT INTO DEPT (NUMDEP, NOMDEP, NOMLOC) VALUES (5, 'ENSEIGNEMENT', ‘LYON');
COMMIT;
Donnera dans la table
« DEPT_ ENSEIGNEMENT” pour la colonne « NOMDEP ».
exercise 7
Modifier votre trigger afin d’obliger la personne qui tente d’insérer un nouveau département à
renseigner correctement « NOMLOC » par une des valeurs déjà présentes dans la table.
exercise 8
On peut utiliser aussi les triggers afin de gérer les numéros automatiques des clés primaires. Pour
cela il faut utiliser une séquence :
CREATE SEQUENCE MONCOMPTEUR INCREMENT BY 1 START WITH 1;
Voilà par exemple comment récupérer la prochaine valeur de la séquence dans un script d’insertion :
INSERT INTO EMP (MONCOMPTEUR.NEXTVAL, ‘TOTO’, ‘CHARLI’, ‘2000’,’CHEF’,1) ;
Ecrire un trigger lié à la table EMP qui, quelque soit la valeur mise dans NUMEMP lors d’une
insertion, s’arrange pour utiliser la séquence et numérote correctement les clés.
exercise 9
2
Supprimer le trigger sur la table « DEPT » en utilisant la commande :
DROP TRIGGER nom_trigger ;
Puis modifier votre trigger lié à la table « EMP » afin qu’en plus de générer automatiquement les
numéros identifiants des employés, ce trigger teste la colonne « NUMDEPT » et dans le cas où le
numéro n’existe pas dans la table « DEPT », un département « NON ATTRIBUE » sera créé avec le
numéro posant problème.
EMPLOYE
DEPARTEMENT