Vous êtes sur la page 1sur 19

SQL

ORACLE

EXERCICES
SOMMAIRE
CHAPITRE 1 MODÈLE PHYSIQUE DE DONNÉES (MPD) DE LA BASE UTILISÉE..............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 Modèle Physique de Données (MPD) de la base utilisée

Modèle Physique de Données e_entrepot


Proj et : Formation no <pk> NUMBER(7) not null
Modèle : Exos continent_no <fk> NUMBER(7) not null
Auteur : Or@Tech Version 1.0 10.11.99 adresse LONG null
ville VARCHAR2(30) null
departement VARCHAR2(20) null
pays VARCHAR2(30) null
e_image cp_postal VARCHAR2(5) null
no <pk> NUMBER(7) not null telephone VARCHAR2(25) null
format VARCHAR2(25) null superieur_no <fk> NUMBER(7) null
validite VARCHAR2(1) null no = continent_no
nom_fichier VARCHAR2(255) null
image LONG RAW null
e_continent
e_texte no <pk> NUMBER(7) not null
nom <ak> VARCHAR2(50) not null
no <pk> NUMBER(7) not null
validite VARCHAR2(1) null
nom_fichier VARCHAR2(255) null
texte VARCHAR2(2000) null no = continent_no

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

no = commande_no titre = titre

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

EXERCICES 1 À 10 : SQL ET SQL*PLUS :

Préparation : charger la base DELUXE.SQL


Enregistrez la requête que vous construirez

Enregistrez également les résultats dans un fichier spool

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.

Exercice 15 : Les vues


Créer une vue V_EMP qui rassemblera :
Le numéro, le nom, le titre, le salaire et le nom du service de l’employé

Regarder le contenu de la vue EMP_T


Supprimer la table E_EMP (avec l’option 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.

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                 
QUICK­TO­SEE                      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 > '20­JAN­92'
/

NOM                               SALAIRE DT_ENTREE   
­­­­­­­­­­­­­­­­­­­­­­­­­ ­­­­­­­­­­­­­­­ ­­­­­­­­­­­ 
NGUYEN                            1525.00 22­JAN­92   
MADURO                            1400.00 07­FEB­92   

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
/

NOM SALAIRE PCT_COMMISSION COMMISSION


------- --------------- --------------- ---------------
NGUYEN 1525.00 15.00 228
DUMAS 1450.00 17.50 253

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                    
QUICK­TO­SEE              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)

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 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)
/

NOM PRENOM DT_ENTREE SALAIRE SERVICE_NO


--------- ------ --------- ------- ----------
NAGAYAMA Midori 17-JUN-91 1400.00 31
MAGEE Colin 14-MAY-90 1400.00 31
GILJUM Henry 18-JAN-92 1490.00 32
SEDEGHI Yasmin 18-FEB-91 1515.00 33
NGUYEN Mai 22-JAN-92 1525.00 34
DUMAS André 09-OCT-91 1450.00 35
PATEL Radha 17-OCT-90 795.00 34

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)

EXERCICES 15 : LES VUES


Créer une vue V_EMP qui rassemblera :
Le numéro, le nom, le titre, le salaire et le nom du service de l’employé
Regarder le contenu de la vue EMP_T
Supprimer la table E_EMP (avec l’option 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 créée.

SQL> select nom, service, titre, salaire from v_emp;


NOM SERVICE TITRE SALAIRE
------------ ------------------ ---------------------- ----------
VELASQUEZ Administration Président 2500
NGAO Opérations DR, Opérations 1450
NAGAYAMA Ventes DR, Ventes 1400
QUICK-TO-SEE Finance DR, Finance 1450
ROPBURN Administration DR, Administration 1550
URGUHART Opérations Chef d'entrepôt 1200
MENCHU Opérations Chef d'entrepôt 1250
BIRI Opérations Chef d'entrepôt 1100
CATCHPOLE Opérations Chef d'entrepôt 1300
HAVEL Opérations Chef d'entrepôt 1307
MAGEE Ventes Représentant Commercial 1400
GILJUM Ventes Représentant Commercial 1490
SEDEGHI Ventes Représentant Commercial 1515
NGUYEN Ventes Représentant Commercial 1525
DUMAS Ventes Représentant Commercial 1450
MADURO Opérations Magasinier 1400
SMITH Opérations Magasinier 940

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).

SUPPRESSION DE LA TABLE CIBLE

SQL> drop table e_emp;


drop table e_emp
*
ERREUR à la ligne 1 :
ORA-02449: clés uniques/primaires de la table référencées par des clés
étrangères

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 supprimée.
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
(basée sur le schéma 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 in number,
nm_job 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 in number,

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
/

Vous aimerez peut-être aussi