Académique Documents
Professionnel Documents
Culture Documents
ORACLE
EXERCICES
SOMMAIRE
CHAPITRE 1 MODÈLE PHYSIQUE DE DONNÉES (MPD) DE LA BASE UTILISÉE..............3
2
/
Chapitre 1 Modèle Physique de Données (MPD) de la base utilisée
no = continent_no e_client
no <pk> NUMBER(7) not null
no = image_no nom VARCHAR2(50) not null
telephone VARCHAR2(25) null
no = texte_no
e_service adresse VARCHAR2(400) null no = superieur_no
ville VARCHAR2(30) null
no <pk> NUMBER(7) not null
nom <ak> VARCHAR2(25) not null departement VARCHAR2(20) null
continent_no <fk,ak> NUMBER(7) null pays VARCHAR2(30) null
cp_postal VARCHAR2(5) null
solvabilite VARCHAR2(9) null
emp_no <fk> NUMBER(7) null
continent_no <fk> NUMBER(7) null
e_produit commentaires VARCHAR2(255) null
no <pk> NUMBER(7) not null
nom <ak> VARCHAR2(50) not null
description VARCHAR2(255) null no = service_no
texte_no <fk> NUMBER(7) null no = emp_no
image_no <fk> NUMBER(7) null
no = superieur_no no = entrepot_no
prix_conseille NUMBER(11,2) null
no = produit_no e_emp
no <pk> NUMBER(7) not null
e_ligne nom VARCHAR2(25) not null
commande_no <pk,fk,ak> NUMBER(7) not null prenom VARCHAR2(25) null
ligne_no <pk> NUMBER(7) not null utilisateur <ak> VARCHAR2(8) null
produit_no <fk,ak> NUMBER(7) not null dt_entree DATE null
prix NUMBER(11,2) null no = client_no commentaires VARCHAR2(255) null
quantite NUMBER(9) null superieur_no <fk> NUMBER(7) null
qte_livree NUMBER(9) null titre <fk> VARCHAR2(25) null
service_no <fk> NUMBER(7) null
salaire NUMBER(11,2) null
no = produit_no pct_commission NUMBER(4,2) null
e_titre
titre <pk> VARCHAR2(25) not null
no = emp_no
e_commande
no <pk> NUMBER(7) not null
client_no <fk> NUMBER(7) not null
dt_commande DATE null
dt_livraison DATE null
e_stock
emp_no <fk> NUMBER(7) null
3 total NUMBER(11,2) null produit_no <pk,fk> NUMBER(7) not null
nt_paiement VARCHAR2(8) null entrepot_no <pk,fk> NUMBER(7) not null
qte_stockee NUMBER(9) null
/ validite VARCHAR2(1) null
stock_securite NUMBER(9) null
max_stocke NUMBER(9) null
detail_sortie VARCHAR2(255) null
dt_stock DATE null
Chapitre 2 : SQL et SQL*Plus
Exercice 1
Liste des services dont le numéro est supérieur à 45.
Exercice 2
Liste des employés dont le nom commence par "M"
Récrire la requête en utilisant une variable.
Exercice 3
Liste des employés n’ayant pas de commission.
Exercice 4
Liste des employés qui ont les fonctions suivantes : Magasinier, Chef d’entrepôt.
Exercice 5
Liste des employés gagnant entre 1400 et 2000 et ayant intégré la société après le 20 janvier
1992.
Exercice 6
Liste des employés dont la commission est supérieure à 200, classés dans l’ordre croissant des
commissions.
Exercice 7
Liste des employés triés par titre et pour chaque titre triés par salaire décroissant.
Exercice 8
Liste des employés et des services dans lesquels ils exercent.
Exercice 9
Liste des numéros de produits qui n’ont jamais été commandés.
Exercice 10
Liste des employés travaillant en Europe et ayant le même titre que SMITH.
4
/
EXERCICES 11 À 14 : SQL ET SQL*PLUS,
Exercice 11
Liste des employés (no, nom, salaire) triés par nom. Le salaire de VELASQUEZ doit être caché
par des "*".
Exercice 12
Liste des employés (nom, prénom, date d’entrée, salaire et numéro de service) travaillant dans un
service qui contient au moins un Représentant Commercial.
Exercice 13
Liste des employés dont le prénom comprend au moins un A ou un i et dont l’ensemble (nom,
prénom) comporte au plus 6 voyelles.
Exercice 14
Afficher les informations du service ayant le plus d’employés : son numéro, son nom, le nom du
continent où il se trouve et le nombre d’employés y travaillant.
5
/
CORRIGES DES EXERCICES
6
/
Chapitre 1 : SQL et SQL*Plus
Ex. 1.
SELECT nom, no
FROM e_service
WHERE no > 45
/
NOM NO
Administration 50
1 ligne(s) retournée(s)
Ex.2.
Première requête
SELECT nom
FROM e_emp
WHERE nom LIKE 'M%'
/
NOM
MENCHU
MAGEE
MADURO
MARKARIAN
4 ligne(s) retournée(s)
7
/
2ème requête
SQL> spool var
SQL> get var2.sql
1 SELECT nom
2 FROM e_emp
3* WHERE nom LIKE '&1%'
SQL> r
1 SELECT nom
2 FROM e_emp
3* WHERE nom LIKE '&1%'
Entrez une valeur pour 1 : M
ancien 3 : WHERE nom LIKE '&1%'
nouveau 3 : WHERE nom LIKE 'M%'
NOM
-------------------------
MENCHU
MAGEE
MADURO
MARKARIAN
4 ligne(s) sélectionnée(s).
Ex.3.
SELECT nom, salaire, pct_commission
FROM e_emp
WHERE pct_commission IS NULL
/
NOM SALAIRE PCT_COMMISSION
VELASQUEZ 2500.00
NGAO 1450.00
NAGAYAMA 1400.00
QUICKTOSEE 1450.00
ROPBURN 1550.00
URGUHART 1200.00
MENCHU 1250.00
BIRI 1100.00
CATCHPOLE 1300.00
HAVEL 1307.00
MADURO 1400.00
SMITH 940.00
NOZAKI 1200.00
PATEL 795.00
NEWMAN 750.00
MARKARIAN 850.00
CHANG 800.00
PATEL 795.00
DANCS 860.00
SCHWARTZ 1100.00
20 ligne(s) retournée(s)
8
/
Ex.4.
SELECT nom , titre
FROM e_emp
WHERE titre IN ('Magasinier', 'Chef d''entrepôt')
/
NOM TITRE
URGUHART Chef d'entrepôt
MENCHU Chef d'entrepôt
BIRI Chef d'entrepôt
CATCHPOLE Chef d'entrepôt
HAVEL Chef d'entrepôt
MADURO Magasinier
SMITH Magasinier
NOZAKI Magasinier
PATEL Magasinier
NEWMAN Magasinier
MARKARIAN Magasinier
CHANG Magasinier
PATEL Magasinier
DANCS Magasinier
SCHWARTZ Magasinier
15 ligne(s) retournée(s)
Ex.5.
SELECT nom, salaire, dt_entree
FROM e_emp
WHERE salaire BETWEEN 1400 AND 2000
AND dt_entree > '20JAN92'
/
NOM SALAIRE DT_ENTREE
NGUYEN 1525.00 22JAN92
MADURO 1400.00 07FEB92
2 ligne(s) retournée(s)
9
/
Ex.6.
SELECT nom, salaire, pct_commission,
pct_commission * salaire/100 "COMMISSION"
FROM e_emp
WHERE (pct_commission * salaire/100) >200
ORDER BY commission
/
2 ligne(s) retournée(s)
Ex.7.
SELECT nom, titre, salaire
FROM e_emp
ORDER BY titre, salaire DESC
/
NOM TITRE SALAIRE
-------------- ------------------------- -------
HAVEL Chef d'entrepôt 1307.00
CATCHPOLE Chef d'entrepôt 1300.00
MENCHU Chef d'entrepôt 1250.00
URGUHART Chef d'entrepôt 1200.00
BIRI Chef d'entrepôt 1100.00
ROPBURN DR, Administration 1550.00
QUICK-TO-SEE DR, Finance 1450.00
NGAO DR, Opérations 1450.00
NAGAYAMA DR, Ventes 1400.00
MADURO Magasinier 1400.00
NOZAKI Magasinier 1200.00
SCHWARTZ Magasinier 1100.00
SMITH Magasinier 940.00
DANCS Magasinier 860.00
MARKARIAN Magasinier 850.00
CHANG Magasinier 800.00
PATEL Magasinier 795.00
PATEL Magasinier 795.00
NEWMAN Magasinier 750.00
VELASQUEZ Président 2500.00
NGUYEN Représentant Commercial 1525.00
SEDEGHI Représentant Commercial 1515.00
GILJUM Représentant Commercial 1490.00
DUMAS Représentant Commercial 1450.00
MAGEE Représentant Commercial 1400.00
10
/
Ex.8.
SELECT e_emp.nom ‘‘EMPLOYE’’, e_service.nom ‘‘SERVICE’’
FROM e_emp, e_service
WHERE e_emp.service_no = e_service.no
/
EMPLOYE SERVICE
VELASQUEZ Administration
NGAO Opérations
NAGAYAMA Ventes
QUICKTOSEE Finance
ROPBURN Administration
URGUHART Opérations
MENCHU Opérations
BIRI Opérations
CATCHPOLE Opérations
HAVEL Opérations
MAGEE Ventes
GILJUM Ventes
SEDEGHI Ventes
NGUYEN Ventes
DUMAS Ventes
MADURO Opérations
SMITH Opérations
NOZAKI Opérations
PATEL Opérations
NEWMAN Opérations
MARKARIAN Opérations
CHANG Opérations
PATEL Ventes
DANCS Opérations
SCHWARTZ Opérations
25 ligne(s) retournée(s)
Ex.9.
SELECT no FROM e_produit
MINUS
SELECT produit_no FROM e_ligne
/
NO
41020
41050
2 ligne(s) retournée(s)
11
/
Ex.10.
SELECT e.nom, e.titre
FROM e_emp e, e_service s
WHERE e.service_no = s.no
AND s.continent_no = (SELECT no FROM e_continent
WHERE nom = 'Europe')
AND titre = (SELECT titre FROM e_emp WHERE nom = 'SMITH')
/
NOM TITRE
DANCS Magasinier
SCHWARTZ Magasinier
2 ligne(s) retournée(s)
Ex.11.
SQL> SELECT no, nom,
2> DECODE(nom, 'VELASQUEZ', '****', salaire) SALAIRE
3> FROM e_emp
4> ORDER BY nom
/
NO NOM SALAIRE
--------- --------------- ------------------------------
8 BIRI 1100
9 CATCHPOLE 1300
22 CHANG 800
24 DANCS 860
15 DUMAS 1450
12 GILJUM 1490
10 HAVEL 1307
16 MADURO 1400
11 MAGEE 1400
21 MARKARIAN 850
7 MENCHU 1250
3 NAGAYAMA 1400
20 NEWMAN 750
2 NGAO 1450
14 NGUYEN 1525
18 NOZAKI 1200
19 PATEL 795
23 PATEL 795
4 QUICK-TO-SEE 1450
5 ROPBURN 1550
25 SCHWARTZ 1100
13 SEDEGHI 1515
17 SMITH 940
6 URGUHART 1200
1 VELASQUEZ ****
25 ligne(s) retournée(s)
12
/
Ex.12.
SELECT nom, prenom, dt_entree, salaire, service_no
FROM e_emp e
WHERE EXISTS (SELECT * FROM e_emp
WHERE titre = 'Représentant Commercial'
AND service_no = e.service_no)
/
7 ligne(s) retournée(s)
Ex.13
SELECT nom, prenom
FROM e_emp
WHERE (prenom LIKE '%A%' OR prenom LIKE '%i%')
AND LENGTH(
TRANSLATE (
UPPER(nom||prenom),
'*BCDFGHJKLMNPQRSTVWXZ','*')) <= 6
/
NOM PRENOM
NGAO LaDoris
ROPBURN Audry
MAGEE Colin
SEDEGHI Yasmin
NGUYEN Mai
DUMAS André
NOZAKI Akira
PATEL Vikram
CHANG Eddie
SCHWARTZ Sylvie
10 ligne(s) retournée(s)
13
/
Ex.14.
SELECT e.service_no, s.nom SERVICE, c.nom CONTINENT, COUNT(*) ‘‘NOMBRE EMPLOYES’’
FROM e_emp e, e_service s, e_continent c
WHERE e.service_no=s.no
AND s.continent_no=c.no
GROUP BY e.service_no, s.nom, c.nom
HAVING COUNT(*) = (SELECT MAX(COUNT(*))
FROM e_emp
GROUP BY service_no)
/
SERVICE_NO SERVICE CONTINENT NOMBRE EMPLOYES
41 Opérations Amérique du Nord 4
1 ligne(s) retournée(s)
14
/
NOZAKI Opérations Magasinier 1200
NEWMAN Opérations Magasinier 750
MARKARIAN Opérations Magasinier 850
CHANG Opérations Magasinier 800
PATEL Ventes Magasinier 795
DANCS Opérations Magasinier 860
SCHWARTZ Opérations Magasinier 1100
25 ligne(s) sélectionnée(s).
15
/
DEMONSTRATIONS
Chapitre 1 : LES TRAITEMENTS STOCKES
DEMONSTRATION : LE PACKAGE
(basée sur le schéma SCOTT)
16
/
dept in number)
as
begin
delete from emp
where empno = no;
commit;
end;
function f_cpt (no_dept in number,
nm_job in varchar2)
return number
as
cpt number :=0;
begin
select count(deptno)
into cpt
from emp
where deptno = no_dept
and upper(job)= upper(nm_job)
;
return(cpt);
end;
end;
/
DEMONSTRATION : LA FONCTION
REM EXECUTION D UNE FONCTION
REM Exemple pour executer la procedure EXE_UIWORK :
REM execute exe_uwork (10,'MANAGER')
REM puis pour vérifier : select * from t_cpt
REM
REM CREATION D UNE TABLE DE RECEPTION DES RESULTATS DE LA FONCTION
DROP TABLE t_cpt;
CREATE TABLE t_cpt
(dt_jr date,
nb_salarie number)
17
/
/
REM CREATION DE LA PROCEDURE QUI EXECUTE LA FONCTION DU PACKAGE
CREATE OR REPLACE PROCEDURE exe_uwork (no_dept number,
nm_job varchar2)
IS
cpt_dept emp.deptno%type := 0;
BEGIN
cpt_dept := pack_emp.f_cpt(no_dept,nm_job);
insert into t_cpt values (sysdate, cpt_dept);
commit;
END;
/
DEMONSTRATION : LE TRIGGER
REM
REM Creation du trigger qui recherche la sequence sur emp2
REM
REM CREATION TABLE EMP2
REM
CREATE TABLE EMP2
(empno number(3) not null,
ename varchar2(15) not null)
TABLESPACE user_data
STORAGE (INITIAL 50K)
/
REM CREATION DE LA SEQUENCE SUR EMP2
REM
CREATE SEQUENCE seq_emp2
increment by 1
start with 1
/
18
/
REM CREATION DU TRIGGER
REM
create or replace trigger trg_seq
before insert
on emp2
for each row
begin
/* select de la sequence dans la variable new. */
select seq_emp2.nextval
into :new.empno
from dual;
end;
/
REM
REM
REM INSERTION dANS EMP2
INSERT INTO emp2 (ename)
VALUES ('EXO TRIGGER')
/
COMMIT;
REM
SELECT * FROM EMP2
/
19
/