Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
A. TRIGGERS [Connectez-vous au compte exemple SCOTT et copier toutes les tables dans votre compte].
Exercice 0 :
Trigger qui affiche un message après chaque manipulation de la table Emp
create or replace trigger alert after insert or update or delete on emp
begin
dbms_output.put_line('Operation terminée');
end;
/
1- Créer un trigger qui -avant de mettre à jour l’âge- d’un étudiant donné, le nouvel âge saisi
doit être supérieur à l’ancien (on utilisera une exception).
3- Donner un trigger qui interdit toute opération lundi sur la table DEPT (compte scott)
ORA-20500: no work
B.PLSQL
On dispose d’une table BUDGET qui a été créée de la manière suivante :
CREATE TABLE BUDGET ( NUM_OPERATION NUMBER (4,2) PRIMARY KEY,
NOM_OPERATION VARCHAR2 (15),
CATEGORIE VARCHAR2 (10),
DATE_OPERATION DATE,
MONTANT NUMBER (6, 2),
SOLDE NUMBER (7, 2) ) ;
Il vous faut créer la table BUDGET à partir de la table BUDGET.
Remarque : les montants des opérations effectuées ainsi que les soldes sont exprimés en Dirhams .
1- On souhaite insérer un nouvel enregistrement dans la table budget sans avoir à saisir le
numéro de l’opération et le nouveau solde. Écrire un programme PL/SQL qui ajoute un nouvel
enregistrement à la table BUDGET avec les valeurs suivantes :
- Num_Operation : calculé automatiquement en ajoutant 1 à la plus grande valeur de
Num_Operation présent dans la table BUDGET.
- Nom_Operation : Courses
- Categorie : Débit
- Date_Operation : 14/01/2002
- Montant : 500 (en dirhams)
- Solde : calculé automatiquement en fonction du dernier solde de la table BUDGET (celui
pour lequel Num_Operation est le plus grand).
-
DECLARE
max_operation budget.num_operation;
new_solde budget.solde%TYPE;
Begin
select max(num_operation)+1 into max_operation from budget;
select solde-500 into new_solde from budget where
num_operation=(select max(num_operation) from budget);
INSERT INTO BUDGET
VALUES(max_operation,'Courses','Ddebit','14/01/2002',500,new_sol
de);
End;
/
C. FONCTIONS/ PROCEDURES/PACKAGES
--appel de la procédure
declare
pnom VARCHAR2(100);
begin
nom_dept2(1,pnom); -- appel de la procedure
dbms_output.put_line(pnom);
end;
/
3- Ecrire une procédure (en utilisant les curseurs et la fonction de l'exercice 1) qui permet
d'afficher les noms des employés sous la forme suivante:
L'employé <<Nom employé>> a la profession <<Profession>> dans le département <<Nom
département >>.
4- Ecrire une fonction, prenant en paramètre le numéro de l'employé, qui permet d'afficher et de
retourner le nom de l'employé (l'affichage est de même forme que la question 1).
6- Ecrire une procédure qui permet d'augmenter les salaires (sans tenir compte la commission)
des employés selon leurs grades.
- 10% pour le grade 1 et grade 2.
- 15% pour le grade 3.
- 20% pour le grade 4 et grade 5.
create or replace procedure augmentation is
cursor c is
select empno,sal,grade from emp, SalGrade where
EMP.SAL between SalGrade.LOSAL and SalGrade.HISAL FOR UPDATE
of SAL;
ligne c%rowtype;
begin
open c;
loop
fetch c into ligne;
exit when c%notfound;
if ligne.grade in (1,2) then
dbms_output.put_line(ligne.sal || ' avec grade de ' || ligne.grade);
update emp set sal=sal*1.1 where empno=ligne.empno;
elsif ligne.grade=3 then
dbms_output.put_line(ligne.sal || ' avec grade de ' || ligne.grade);
update emp set sal=sal*1.15 where empno=ligne.empno;
else
dbms_output.put_line(ligne.sal || ' avec grade de ' || ligne.grade);
update emp setselect sal=sal*1.2 where empno=ligne.empno;
end if ;
end loop;
close c;
end augmentation;
/
7-Donner une fonction qui permet de retourner le salaire maximum pour un département donné
(compte SCOTT)
8-Donner une procédure qui permet de majorer le salaire des employés d’un département donné
avec un taux donné (compte SCOTT)
9-Donner une procédure qui permet de créer un utilisateur donné (paramètre nom utilisateur et
password)
10-Créer une fonction qui permet de retourner la moyenne des salaires les plus
basses par département ; et qui permet d'afficher un message indiquant si la
moyenne des salaires d'un empolyé donné passé en paramètres à cette fonction est
> ou < ou = à la moyenne des salaires la plus basse
set serveroutput on
open c;
fetch c into v;
if(v <= moyen)
then
DBMS_output.put_line('le salaire est inferieur');
end if;
close c;
RETURN(moyen) ;
END ;
Appel : Nom_package.NomProc(parmEffectifs)