Vous êtes sur la page 1sur 2

ENSIAS Premire anne

Anne universitaire 2006-2007

TP : PL/SQL (1/2)
Soit le schma relationnel suivant :
E_TITRE (#TITRE VARCHAR2(25)); E_SERVICE(#NO NUMBER(7), NOM VARCHAR2(50)); E_EMPLOYE(#NO NUMBER(7), NOM VARCHAR2(50), PRENOM VARCHAR2(25), DT_ENTREE DATE, TITRE VARCHAR2(25), SERVICE_NO NUMBER(7), COMMENTAIRE VARCHAR2(200), SALAIRE NUMBER(11,2), PCT_COMMISSION NUMBER(4,2)); E_CLIENT(#NO NUMBER(7), NOM VARCHAR2(50), PRENOM VARCHAR2(25), TELEPHONE VARCHAR2(25), ADRESSE VARCHAR2(200), VILLE VARCHAR2(30), PAYS VARCHAR2(30), CP_POSTAL VARCHAR2(5), COMMENTAIRE VARCHAR2(200)); E_PRODUIT(#NO NUMBER(7), NOM VARCHAR2(50), DESCRIPTION VARCHAR2(200), PRIX_CONSEILLE NUMBER(11,2)); E_ENTREPOT(#NO NUMBER(7), ADRESSE VARCHAR2(200), VILLE VARCHAR2(30), PAYS VARCHAR2(30), CP_POSTAL VARCHAR2(5), TELEPHONE VARCHAR2(25)); E_STOCK(#NO NUMBER(7), PRODUIT_NO NUMBER(7), ENTREPOT_NO NUMBER(7), QTE_STOCK NUMBER(9), STOCK_SECURITE NUMBER(9), MAX_STOCK NUMBER(9), DT_STOCK DATE); E_COMMANDE(#NO NUMBER(7), CLIENT_NO NUMBER(7), DATE_COMMANDE DATE, DATE_LIVRAISON DATE, EMPLOYE_NO NUMBER(7), TOTAL NUMBER(11,2)); E_LIGNE(#NO NUMBER(7), COMMANDE_NO NUMBER(7), PRODUIT_NO NUMBER(7), PRIX NUMBER(11,2), QUANTITE NUMBER(9));

Sous SQL*Plus, excuter la commande start creationBase.sql pour crer les tables de ce schma relationnel. (creationBase.sql est un script sql contenant des commandes SQL). Excuter la commande start remplirBase.sql pour insrer des donnes dans les tables.

Exercice 1 (IF...THEN...ELSIF...ELSE)
Crer une table E_Augmentation comprenant les champs suivants : No Number(7), Augmentation Number(11,2), Date_Augmentation Number(7) Date, Emp_No

1- Ecrire un programme permettant : - de saisir en entre le nom dun employ - de mettre jour le salaire de cet employ selon les conditions suivantes : si son anne dentre dans la socit est 1995, augmenter le salaire de 50%. si son anne dentre dans la socit est 1996, augmenter le salaire de 25%. si son anne dentre dans la socit est 1997, augmenter le salaire de 10%.

1/2

2- Modifier ce programme afin dinsrer dans la table E_Augmentation le montant daugmentation, la date daugmentation, le numro de lemploy, ainsi que le champ No qui sert didentifiant de ligne pour la table.

Exercice 2 (Curseur, Instructions OPEN, FETCH, CLOSE, %FOUND)


Ecrire un programme permettant : - la mise jour du salaire de tous les employs de la table E_Employe suivant les conditions de lexercice 1. - linsertion des modifications dans la table E_Augmentation.

Exercice 3 (Utilisation dun curseur paramtr)


Crer une table E_Resultat : E_Resultat (No Number(2), LB_Resultat Varchar2(60), VL_Resultat Number(11,2)) Ecrire un programme qui insre dans la table E_Resultat le nom de lemploy et son salaire pour les employs dont le salaire vrifie les conditions suivantes : Si le salaire >3500, insrer dans la table E_Resultat les donnes suivantes : No --> <<No-programme>> LB_Resultat --> <<Variable_Nom_Employ>> a un salaire > 3500 VL_Resultat --> <<Variable_Salaire_Employ>> Si le salaire >4500, insrer dans la table E_Resultat les donnes suivantes : No --> <<No-programme>> LB_Resultat --> <<Variable_Nom_Employ>> a un salaire > 4500 VL_Resultat --> <<Variable_Salaire_Employ>>

Exercice 4 (Utilisation dun curseur avec la boucle FORLOOP)


Ecrire un programme permettant de faire le total des commandes gres par chaque employ. Pour les employs qui ont gr des commandes, faire les insertions dans la table E_Resultat selon le schma suivant : No --> <<No-programme>> LB_Resultat --> <<Nom_Employ>> totalise VL_Resultat --> <<Total des commandes gres>>

Exercice 5 (Curseur et clause CURRENT OF)


Ecrire un programme permettant : - dabaisser de 30% le prix conseill des produits qui ne figurent sur aucune des commandes. - Insrer dans la table E_Resultat les produits concerns par la rduction : No --> <<No-programme>> LB_Resultat --> <<Variable_Numro_Produit>> - <<Nom_Produit>> baisse de 30% VL_Resultat --> <<Variable_Prix_Conseill_avant_de_30%>>

2/2