Vous êtes sur la page 1sur 19

SQL

ORACLE
EXERCICES

SOMMAIRE
CHAPITRE 1 MODLE PHYSIQUE DE DONNES (MPD) DE LA BASE UTILISE..............3
CHAPITRE 2 : SQL ET SQL*PLUS....................................................................................................4
EXERCICES 1 10 : SQL ET SQL*PLUS :..............................................................................................................................4
EXERCICES 11 14 : SQL ET SQL*PLUS,............................................................................................................................5

CORRIGES DES EXERCICES......................................................6


CHAPITRE 2 : SQL ET SQL*PLUS...................................................................................................7
EXERCICES 1 10 : SQL ET SQL*PLUS :..............................................................................................................................7
EX. 1...........................................................................................................................................................................................7
EX.2............................................................................................................................................................................................7
EX.3............................................................................................................................................................................................8
EX.4............................................................................................................................................................................................9
EX.5............................................................................................................................................................................................9
EX.6..........................................................................................................................................................................................10
EX.7..........................................................................................................................................................................................10
EX.8..........................................................................................................................................................................................11
EX.9..........................................................................................................................................................................................11
EX.10........................................................................................................................................................................................12
EXERCICES 11 14 : SQL ET SQL*PLUS............................................................................................................................12
EX.11........................................................................................................................................................................................12
EX.12........................................................................................................................................................................................13
EX.13........................................................................................................................................................................................13
EX.14........................................................................................................................................................................................14
EXERCICES 15 : LES VUES...................................................................................................................................................14

DEMONSTRATIONS...........................................................................................................................16
CHAPITRE 3 : LES TRAITEMENTS STOCKES........................................................................... 16

2
/

Chapitre 1 Modle Physique de Donnes (MPD) de la base utilise


Modle Physique de Donnes
Proj et : Formation
Modle : Exos
Auteur : Or@Tech Version 1.0 10.11.99

e_image
no
format
validite
nom_fichier
image

<pk> NUMBER(7)
VARCHAR2(25)
VARCHAR2(1)
VARCHAR2(255)
LONG RAW

not null
null
null
null
null

<pk>

NUMBER(7)
VARCHAR2(1)
VARCHAR2(255)
VARCHAR2(2000)

not null
null
null
null

no
nom

e_continent
<pk> NUMBER(7)
<ak> VARCHAR2(50)

no = image_no

e_service
no
nom
continent_no

<pk>
<ak>
<fk,ak>

NUMBER(7)
VARCHAR2(25)
NUMBER(7)

e_produit
<pk> NUMBER(7)
<ak> VARCHAR2(50)
VARCHAR2(255)
<fk> NUMBER(7)
<fk> NUMBER(7)
NUMBER(11,2)

no
nom
description
texte_no
image_no
prix_conseille

not null
not null
null
null
null
null

e_client
<pk> NUMBER(7)
VARCHAR2(50)
VARCHAR2(25)
VARCHAR2(400)
VARCHAR2(30)
VARCHAR2(20)
VARCHAR2(30)
VARCHAR2(5)
VARCHAR2(9)
<fk> NUMBER(7)
<fk> NUMBER(7)
VARCHAR2(255)

not null
not null
null

no
nom
telephone
adresse
ville
departement
pays
cp_postal
solvabilite
emp_no
continent_no
commentaires

commande_no
ligne_no
produit_no
prix
quantite
qte_livree

not null
not null
not null
null
null
null

not null
not null
null
null
no = superieur_no
null
null
null
null
null
null
null
null

no = service_no
no = emp_no

no
nom
prenom
utilisateur
dt_entree
commentaires
no = client_no
superieur_no
titre
service_no
salaire
no = produit_no pct_commission

e_emp
<pk> NUMBER(7)
VARCHAR2(25)
VARCHAR2(25)
<ak> VARCHAR2(8)
DATE
VARCHAR2(255)
<fk> NUMBER(7)
<fk> VARCHAR2(25)
<fk> NUMBER(7)
NUMBER(11,2)
NUMBER(4,2)

e_titre
titre <pk> VARCHAR2(25)

3
/

no
client_no
dt_commande
dt_livraison
emp_no
total
nt_paiement
validite

not null
not null
null
null
null
null
null
null
null
null
null

titre = titre

no = commande_no

e_commande
<pk> NUMBER(7)
<fk> NUMBER(7)
DATE
DATE
<fk> NUMBER(7)
NUMBER(11,2)
VARCHAR2(8)
VARCHAR2(1)

no = entrepot_no

no = superieur_no

no = produit_no

e_ligne
<pk,fk,ak> NUMBER(7)
<pk>
NUMBER(7)
<fk,ak>
NUMBER(7)
NUMBER(11,2)
NUMBER(9)
NUMBER(9)

not null
not null

no = continent_no

no = continent_no

no = texte_no

not null
not null
null
null
null
null
null
null
null

no = continent_no

e_texte
no
validite
nom_fichier
texte

e_entrepot
<pk> NUMBER(7)
<fk> NUMBER(7)
LONG
VARCHAR2(30)
VARCHAR2(20)
VARCHAR2(30)
VARCHAR2(5)
VARCHAR2(25)
<fk> NUMBER(7)

no
continent_no
adresse
ville
departement
pays
cp_postal
telephone
superieur_no

not null

no = emp_no

not null
not null
null
null
null
null
null
null

produit_no
entrepot_no
qte_stockee
stock_securite
max_stocke
detail_sortie
dt_stock

e_stock
<pk,fk> NUMBER(7)
<pk,fk> NUMBER(7)
NUMBER(9)
NUMBER(9)
NUMBER(9)
VARCHAR2(255)
DATE

not null
not null
null
null
null
null
null

Chapitre 2 : SQL et SQL*Plus


EXERCICES 1 10 : SQL ET SQL*PLUS :
Prparation : charger la base DELUXE.SQL
Enregistrez la requte que vous construirez
Enregistrez galement les rsultats dans un fichier spool

Exercice 1
Liste des services dont le numro est suprieur 45.

Exercice 2
Liste des employs dont le nom commence par "M"
Rcrire la requte en utilisant une variable.

Exercice 3
Liste des employs nayant pas de commission.

Exercice 4
Liste des employs qui ont les fonctions suivantes : Magasinier, Chef dentrept.

Exercice 5
Liste des employs gagnant entre 1400 et 2000 et ayant intgr la socit aprs le 20 janvier
1992.

Exercice 6
Liste des employs dont la commission est suprieure 200, classs dans lordre croissant des
commissions.

Exercice 7
Liste des employs tris par titre et pour chaque titre tris par salaire dcroissant.

Exercice 8
Liste des employs et des services dans lesquels ils exercent.

Exercice 9
Liste des numros de produits qui nont jamais t commands.

Exercice 10
Liste des employs travaillant en Europe et ayant le mme titre que SMITH.

4
/

EXERCICES 11 14 : SQL ET SQL*PLUS,


Exercice 11
Liste des employs (no, nom, salaire) tris par nom. Le salaire de VELASQUEZ doit tre cach
par des "*".

Exercice 12
Liste des employs (nom, prnom, date dentre, salaire et numro de service) travaillant dans un
service qui contient au moins un Reprsentant Commercial.

Exercice 13
Liste des employs dont le prnom comprend au moins un A ou un i et dont lensemble (nom,
prnom) comporte au plus 6 voyelles.

Exercice 14
Afficher les informations du service ayant le plus demploys : son numro, son nom, le nom du
continent o il se trouve et le nombre demploys y travaillant.

Exercice 15 : Les vues


Crer une vue V_EMP qui rassemblera :
Le numro, le nom, le titre, le salaire et le nom du service de lemploy
Regarder le contenu de la vue EMP_T
Supprimer la table E_EMP (avec loption CASCADE CONSTRAINTS)
Afficher le contenu de la vue V_EMP Que se passe-t-il ?

5
/

CORRIGES DES EXERCICES

6
/

Chapitre 1 : SQL et SQL*Plus


EXERCICES 1 10 : SQL ET SQL*PLUS :
Ex. 1.
SELECTnom,no
FROMe_service
WHEREno>45
/
NOMNO

Administration50
1 ligne(s) retourne(s)

Ex.2.
Premire requte
SELECTnom
FROMe_emp
WHEREnomLIKE'M%'
/
NOM

MENCHU
MAGEE
MADURO
MARKARIAN
4 ligne(s) retourne(s)

7
/

2me requte
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) slectionne(s).

Ex.3.
SELECTnom,salaire,pct_commission
FROMe_emp
WHEREpct_commissionISNULL
/
NOMSALAIREPCT_COMMISSION

VELASQUEZ2500.00
NGAO1450.00
NAGAYAMA1400.00
QUICKTOSEE1450.00
ROPBURN1550.00
URGUHART1200.00
MENCHU1250.00
BIRI1100.00
CATCHPOLE1300.00
HAVEL1307.00
MADURO1400.00
SMITH940.00
NOZAKI1200.00
PATEL795.00
NEWMAN750.00
MARKARIAN850.00
CHANG800.00
PATEL795.00
DANCS860.00
SCHWARTZ1100.00
20 ligne(s) retourne(s)

8
/

Ex.4.
SELECTnom,titre
FROMe_emp
WHEREtitreIN('Magasinier','Chefd''entrept')
/
NOMTITRE

URGUHARTChefd'entrept
MENCHUChefd'entrept
BIRIChefd'entrept
CATCHPOLEChefd'entrept
HAVELChefd'entrept
MADUROMagasinier
SMITHMagasinier
NOZAKIMagasinier
PATELMagasinier
NEWMANMagasinier
MARKARIANMagasinier
CHANGMagasinier
PATELMagasinier
DANCSMagasinier
SCHWARTZMagasinier
15 ligne(s) retourne(s)

Ex.5.

SELECTnom,salaire,dt_entree
FROMe_emp
WHEREsalaireBETWEEN1400AND2000
ANDdt_entree>'20JAN92'
/
NOMSALAIREDT_ENTREE

NGUYEN1525.0022JAN92
MADURO1400.0007FEB92
2 ligne(s) retourne(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
/
NOM
SALAIRE PCT_COMMISSION
COMMISSION
------- --------------- --------------- --------------NGUYEN
1525.00
15.00
228
DUMAS
1450.00
17.50
253
2 ligne(s) retourne(s)

Ex.7.
SELECT nom, titre, salaire
FROM e_emp
ORDER BY titre, salaire DESC
/
NOM
TITRE
-------------- -------------------------

SALAIRE
-------

HAVEL

Chef d'entrept

1307.00

CATCHPOLE

Chef d'entrept

1300.00

MENCHU

Chef d'entrept

1250.00

URGUHART

Chef d'entrept

1200.00

BIRI

Chef d'entrept

1100.00

ROPBURN

DR, Administration

1550.00

QUICK-TO-SEE

DR, Finance

1450.00

NGAO

DR, Oprations

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

Prsident

2500.00

NGUYEN

Reprsentant Commercial

1525.00

SEDEGHI

Reprsentant Commercial

1515.00

GILJUM

Reprsentant Commercial

1490.00

DUMAS

Reprsentant Commercial

1450.00

MAGEE

Reprsentant Commercial

1400.00

10
/

Ex.8.
SELECTe_emp.nomEMPLOYE,e_service.nomSERVICE
FROMe_emp,e_service
WHEREe_emp.service_no=e_service.no
/
EMPLOYESERVICE

VELASQUEZAdministration
NGAOOprations
NAGAYAMAVentes
QUICKTOSEEFinance
ROPBURNAdministration
URGUHARTOprations
MENCHUOprations
BIRIOprations
CATCHPOLEOprations
HAVELOprations
MAGEEVentes
GILJUMVentes
SEDEGHIVentes
NGUYENVentes
DUMASVentes
MADUROOprations
SMITHOprations
NOZAKIOprations
PATELOprations
NEWMANOprations
MARKARIANOprations
CHANGOprations
PATELVentes
DANCSOprations
SCHWARTZOprations
25 ligne(s) retourne(s)

Ex.9.
SELECTnoFROMe_produit
MINUS
SELECTproduit_noFROMe_ligne
/

NO

41020
41050
2 ligne(s) retourne(s)

11
/

Ex.10.
SELECTe.nom,e.titre
FROMe_empe,e_services
WHEREe.service_no=s.no
ANDs.continent_no=(SELECTnoFROMe_continent
WHEREnom='Europe')
ANDtitre=(SELECTtitreFROMe_empWHEREnom='SMITH')
/
NOMTITRE

DANCSMagasinier
SCHWARTZMagasinier
2 ligne(s) retourne(s)

EXERCICES 11 14 : SQL ET SQL*PLUS


Ex.11.
SQL> SELECT no, nom,
2> DECODE(nom, 'VELASQUEZ', '****', salaire) SALAIRE
3> FROM e_emp
4> ORDER BY nom
/
NO
--------8
9
22
24
15
12
10
16
11
21
7
3
20
2
14
18
19
23
4
5
25
13
17
6
1

NOM
--------------BIRI
CATCHPOLE
CHANG
DANCS
DUMAS
GILJUM
HAVEL
MADURO
MAGEE
MARKARIAN
MENCHU
NAGAYAMA
NEWMAN
NGAO
NGUYEN
NOZAKI
PATEL
PATEL
QUICK-TO-SEE
ROPBURN
SCHWARTZ
SEDEGHI
SMITH
URGUHART
VELASQUEZ

SALAIRE
-----------------------------1100
1300
800
860
1450
1490
1307
1400
1400
850
1250
1400
750
1450
1525
1200
795
795
1450
1550
1100
1515
940
1200
****

25 ligne(s) retourne(s)
12
/

Ex.12.
SELECTnom,prenom,dt_entree,salaire,service_no
FROMe_empe
WHEREEXISTS(SELECT*FROMe_emp
WHEREtitre='ReprsentantCommercial'
ANDservice_no=e.service_no)
/
NOM
--------NAGAYAMA
MAGEE
GILJUM
SEDEGHI
NGUYEN
DUMAS
PATEL

PRENOM
-----Midori
Colin
Henry
Yasmin
Mai
Andr
Radha

DT_ENTREE
--------17-JUN-91
14-MAY-90
18-JAN-92
18-FEB-91
22-JAN-92
09-OCT-91
17-OCT-90

SALAIRE
------1400.00
1400.00
1490.00
1515.00
1525.00
1450.00
795.00

SERVICE_NO
---------31
31
32
33
34
35
34

7 ligne(s) retourne(s)

Ex.13

SELECTnom,prenom
FROMe_emp
WHERE(prenomLIKE'%A%'ORprenomLIKE'%i%')
ANDLENGTH(
TRANSLATE(
UPPER(nom||prenom),
'*BCDFGHJKLMNPQRSTVWXZ','*'))<=6
/
NOMPRENOM

NGAOLaDoris
ROPBURNAudry
MAGEEColin
SEDEGHIYasmin
NGUYENMai
DUMASAndr
NOZAKIAkira
PATELVikram
CHANGEddie
SCHWARTZSylvie
10ligne(s)retourne(s)

13
/

Ex.14.
SELECTe.service_no,s.nomSERVICE,c.nomCONTINENT,COUNT(*)NOMBREEMPLOYES
FROMe_empe,e_services,e_continentc
WHEREe.service_no=s.no
ANDs.continent_no=c.no
GROUPBYe.service_no,s.nom,c.nom
HAVINGCOUNT(*)=(SELECTMAX(COUNT(*))
FROMe_emp
GROUPBYservice_no)
/
SERVICE_NOSERVICECONTINENTNOMBREEMPLOYES

41OprationsAmriqueduNord4
1ligne(s)retourne(s)

EXERCICES 15 : LES VUES


Crer une vue V_EMP qui rassemblera :
Le numro, le nom, le titre, le salaire et le nom du service de lemploy
Regarder le contenu de la vue EMP_T
Supprimer la table E_EMP (avec loption CASCADE CONSTRAINTS)
Afficher le contenu de la vue V_EMP Que se passe-t-il ?
Supprimer la vue V_EMP
SQL> create or replace view v_emp
2 as
3 select e.no, e.nom, e.prenom, e.titre, e.salaire, d.nom "SERVICE"
4 from e_emp e, e_service d
5* where e.service_no = d.no
Vue cre.
SQL> select nom, service, titre, salaire from v_emp;
NOM
SERVICE
TITRE
SALAIRE
------------ ------------------ ---------------------- ---------VELASQUEZ
Administration
Prsident
2500
NGAO
Oprations
DR, Oprations
1450
NAGAYAMA
Ventes
DR, Ventes
1400
QUICK-TO-SEE Finance
DR, Finance
1450
ROPBURN
Administration
DR, Administration
1550
URGUHART
Oprations
Chef d'entrept
1200
MENCHU
Oprations
Chef d'entrept
1250
BIRI
Oprations
Chef d'entrept
1100
CATCHPOLE
Oprations
Chef d'entrept
1300
HAVEL
Oprations
Chef d'entrept
1307
MAGEE
Ventes
Reprsentant Commercial 1400
GILJUM
Ventes
Reprsentant Commercial 1490
SEDEGHI
Ventes
Reprsentant Commercial 1515
NGUYEN
Ventes
Reprsentant Commercial 1525
DUMAS
Ventes
Reprsentant Commercial 1450
MADURO
Oprations
Magasinier
1400
SMITH
Oprations
Magasinier
940

14
/

NOZAKI
NEWMAN
MARKARIAN
CHANG
PATEL
DANCS
SCHWARTZ

Oprations
Oprations
Oprations
Oprations
Ventes
Oprations
Oprations

Magasinier
Magasinier
Magasinier
Magasinier
Magasinier
Magasinier
Magasinier

1200
750
850
800
795
860
1100

25 ligne(s) slectionne(s).

SUPPRESSION DE LA TABLE CIBLE


SQL> drop table e_emp;
drop table e_emp
*
ERREUR la ligne 1 :
ORA-02449: cls uniques/primaires de la table rfrences par des cls
trangres
SQL> drop table e_emp cascade;
drop table e_emp cascade
*
ERREUR la ligne 1 :
ORA-00905: Mot-cl absent
SQL>
SQL> drop table e_emp cascade constraints;
Table supprime.
LA VUE EXISTE MAIS ELLE EST INVALIDE !
SQL> select * from v_emp;
select * from v_emp
*
ERREUR la ligne 1 :
ORA-04063: view "SCOTT.V_EMP" a des erreurs

15
/

DEMONSTRATIONS
Chapitre 1 : LES TRAITEMENTS STOCKES
DEMONSTRATION : LE PACKAGE
(base sur le schma SCOTT)

create or replace package pack_emp


as

procedure pp_emp (no

in number,

name

in varchar,

salr

in number,

dept

in number)

;
procedure pp_sup (no

in number,

dept

in number)

;
function f_cpt (no_dept
nm_job

in number,
in varchar2)

return number
;
end;
/
create or replace package body pack_emp
as procedure pp_emp (no

in number,

name

in varchar,

salr

in number,

dept

in number)

as
begin
insert into emp (empno, ename, sal, deptno)
values (no,name, salr, dept);
commit;
end;
procedure pp_sup (no
16
/

in number,

dept in number)
as
begin
delete from emp
where empno = no;
commit;
end;
function f_cpt (no_dept
nm_job

in number,
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 vrifier : 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
nm_job

number,
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
/