Compte Rendu BDA 8

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

Compte-Rendu 8

Gr 7

Rédigé par :
M. KARROUMI Ilyass

Encadré par :
Mme. NASIRI Samia

1|Page
Introduction:
Dans ce TP nous allons mettre en œuvre les fonctions et procédures stockés pour bien

appréhender leurs rôles dans un SGBDR.

Exercice I- Les Procédures Stockées


I- Création et exécution d’une procédure stockée
Afin de créer une procédure stockée vous placer l’ordre suivant :

CREATE OR REPLACE PROCEDURE salaire_moyen is

Avec le bloc de programme qui calcule la moyenne des salaires de la table EMPLOYEES

DECLARE
moye NUMBER(7,2);
Begin
SELECT AVG(salary) INTO moye FROM EMPLOYEES;
DBMS_OUTPUT.PUT_LINE ('à la date du ' || SYSDATE);
DBMS_OUTPUT.PUT_LINE ('La moyenne des salaires est : ' || moye);
DBMS_OUTPUT.PUT_LINE ('Préparer par ' || USER);
END;
1. Écrire et stocker ce code en tant que procédure.

2. Compiler la procedure

3. Si c’est bien compiler exécuter la procédure avec les 3 méthodes qu’on a vu au


cours.

2|Page
II- Procédures stockées avec paramètres
1. Écrire une procédure « socket » qui prend en paramètre le department_id et renvoie
dans un paramètre la moyenne des salaires des employées de ce département

NB : la procédure n’affiche rien à la sortie

- Écrire un bloc PL/SQL où vous faites appel à la procédure pour afficher la


moyenne de 3 départements de votre choix
2. Écrire une procédure qui met à jour les salaires des employés comme suit: –
Lorsque le salaire d’un employé est nulle (isnull) , alors on lui affecte le plus petit
salaire (de tous les employés). Sinon on augmente le salaire avec une valeur
souhaitée. La procédure reçoit comme paramètres: le numéro d’employé
(employee_id) et l’augmentation du salaire (Augmentation)

- Écrire un bloc PL/SQL où vous faites appel à la procédure pour appliquer


une augmentation du salaire à un employé de votre choix

3|Page
III- Déclarer et appeler des procédures au sein de procédures
1. Étudier le code ci-dessous(ne le taper pas pour le moment)notez tout d’abord la
sortie que vous attendez du programme ?
 Le programme va seulement être compilé.
2. Maintenant taper ce code, puis exécuter la procédure principale et voir si vous
obtenez la même chose que vous avez notée.
create or replace procedure proc_principale is
v_test number:=4;
procedure
proc_intern_1 is
begin
dbms_output.put_line(v_test||' la procedure interne 1’);
end proc_intern_1; procedure proc_intern_2 is
begin
dbms_output.put_line(v_test||' la procedure interne 2’);
end proc_intern_2;
begin
while v_test<=10 loop
proc_intern_1; if
mod(v_test,2)=0 then
proc_intern_2;
end if;
v_test:=v_test+1; end
loop; end
proc_principale;

IV-Les Fonctions Stockées


1- Écrire une fonction nmb_emp_job qui accepte le JOB_ID comme paramètre et renvoie le
nombre des employés qui occupe ce JOB.

4|Page
1.1 Faite des exemples d’exécutions pour s’assurer de la validité de votre fonction

Entre autre vous faites SELECT nmb_emp_job (‘AD_PRES’) from dual;

Triggers (déclencheurs)
Exercice 1 :

La table articles (nom_Prod (varchar2), Quantite (number), Prix_u(number) , cout (number)) contient les
détails sur les produit, où cout est une colonne calculée, elle enregistre le cout de l’article, elle est
calculé par cout =prix_u * quantite

1- Créer cette table

2- Insérer la ligne suivante nom_prod= LapTopHP,Quantite=5, prix=3600,00

3- Faire un select* from articles, Que est ce que vous constatez pour le champ cout ?

 Le champ cout est vide.


4- Vous allez remédier à ce constat en créant le trigger suivant
CREATE OR REPLACE TRIGGER ARTCILE_TRG1
BEFORE
INSERT OR UPDATE ON ARTICLES
FOR EACH ROW
BEGIN
:NEW.COUT := :NEW.QUANTITE * :NEW.PRIX; END;

5|Page
5- Test de Trigger ARTCILE_TRG1
5.1 - Maintenant insérer les lignes suivantes dans la table ARTICLES :

Nom_prod Quantite Prix


Lap_Top_COM 10 2000,5
Mouse_king 40 20,00
USB_Key_Row 60 23,00
Lap_Top_Del 2 2300,00

5.2 - faire un select * from ARTICLES, Que est ce que vous constatez pour le champ
cout ? Expliquer … ?

5.3 – en une seule instruction, Procéder à une mise à jour du prix de tous les articles
Lap_Top à 2500, Qu’est-ce que vous constatez pour le champ cout ? Expliquer … ?

6- Le statut de trigger peut être activé ou désactivé (ENABLE or DISABLE)


6.1 Vérifier que le trigger ARTICLE_TRG1 est actif.

6.2 On peut gérer les trigger par la commande ALTER TRIGGER


Par exemple, pour désactivé le trigger ARTICLE_TRG1 :
ALTER TRIGGER ARTICLE_TRG1 DISABLE
Et pour l’activer
ALTER TRIGGER ARTCILE_TRG1 ENABLE

6|Page
a- Désactiver le trigger et essayer d’insérer un nouveau enregistrement ou de MAJ la
table ARTICLES, Que est ce que vous constatez pour le champ cout ? Expliquer ?

b- Activer le de nouveau et essayer d’insérer un nouveau enregistrement ou de MAJ la


table ARTICLES, Que est ce que vous constatez pour le champ cout ? Expliquer ?

Exercice 2 :

Les déclencheurs (Triggers)prouventdéclarer des exceptions et prévenir une modification indésirable


d’une table.Dans cet exemple nous allons créer un trigger EMP_TRG1 qui bloque une modification du
salaire d’un employé dans la table EMPLOYEES parvenu d’un utilisateur non autorisé à le faire

CREATE OR REPLACE TRIGGER EMP_TRG1


BEFORE UPDATE OF SALARY ON EMPLOYEES
FOR EACH ROW
DECLARE
User_non_autorise EXCEPTION;
BEGIN
IF (USER <> 'HR') THEN
RAISE User_non_autorise ;
END IF;
EXCEPTION WHEN User_non_autorise THEN
RAISE_APPLICATION_ERROR(-20001, 'SEUL le MANAGER peut CHANGER
le
Salaire');
END;
Le trigger utilise la procédureRAISE_APPLICATION_ERROR, qui prend deux paramètres,

Numéro de l’erreur (tout numéro entre –20001 et –20999) et le message d’erreur qu’on désire afficher
à l’écran.

1- Pour tester ce trigger

1.a) faire un update de salaire d’un employé de votre choix

1.b) créer un autre utilisateur TEST_ESTM


 Create user TEST_ESTM identified by estm ;
 Crantresource,connect to TEST_ESTM ;
 Grant update on EMPLOYEES to TEST_ESTM ;

7|Page

Vous aimerez peut-être aussi

pFad - Phonifier reborn

Pfad - The Proxy pFad of © 2024 Garber Painting. All rights reserved.

Note: This service is not intended for secure transactions such as banking, social media, email, or purchasing. Use at your own risk. We assume no liability whatsoever for broken pages.


Alternative Proxies:

Alternative Proxy

pFad Proxy

pFad v3 Proxy

pFad v4 Proxy