Beruflich Dokumente
Kultur Dokumente
"
$
%
#
&
*
'
"#
+
! "
&#
$ ( $
&%
$ #! %
'# &
$")%
,&-
.
&
1
0.
.
2%
(
(#+
.
* )
!
0.
.
3 3
+,)- +.+), /0
1
4 35
'
5 7535
5 9 % ,&
4 51 &.;55
:
9 <
= 6&0=
(= 6&0> = 6&0
) '
$
5'
#
":
'
$
" 6 5
)
22
# ":
%
2..
(= 6&0>
%
!: #
0 '
#
%
:
22
.6 "
.6 8
<
$
5&5=
&9
5 9 @% ,&
)
'
6%51 &.;55 ?
(
<
)( )
(3) 5 9 @% ,&
#
5&5=
:'
37915 6.1
:'
5 9 @% ,&(
<
:'
:'
'
9A
(3) 5 9 @% ,&(
/
(
)-,
<
5 9 @% ,&(
/#
#
<
5 9 @% ,&
:'
5
4
'
6%
'
#
#
6B 6B@ C%)% &
$
4
B B@ C
#< %
&
:
4
6(
0 9
6
'
%7
4 #
)
20 9
M0 9
F0 9
"
" DDDDE% ( F)
: 4
GHD@HIG
(@ )
J
KL:%(@)
'
K:% ( D)
N0 9 #
( )
M%
G0 9
O0 9
#
'<
%9
:
4
-3
%.
(F)
M
"K
'
#
#
@0 9 #
2DHDHIIG%
0&
# %
:% (N)
# K
'
:
% ( DG)
"5
0&
27 4(
I0 9
4 %
"'
" 86
$
)
#P
:'
" (
< %
#4
<
%
A
D0 9
0 9
@0
% ( O)
:
4
20 9
:
M0
% ( N)
(@M)
'
F0
(F )
( I)
#
K*
( I)
#
DDDDE% (F)
"
#
0 6
@0 ,
= .796; (
20 6
:.
:.
("
)
M0
F0 6
N0 6
:
4
#
4 9&&3 9B&5
' J
6%
'
9&&3 9B3=.& 17 %
:
4 L.B
4
.
'
4
6
4
"
#
51 &.;55 (): 20))7+, 6 37915 &9 37915 519 &
.7537 1B56 653 9 5 L.B3
9&96; =.11
.73 =
)
=. 7 6 5 ( 2*-
07+, =. 7 6;37915
5 96 157
,) ( : )- 7+, 5 96 157 37915
L.B
;2/7+, L.B3
L.B3
.6;
(): 20))7+,
&.=9 .7
( 2 ( +2-7+,
)
&.=9 .73 )
7,( ) 57 3 9 5
655 39
65
9&3=. 5= ;
9 53 6./ 7=5
0
:
4 (
%
:
4
)
): 20))
7
7 &&R
00000000000000000000000000000000000000000 00000000 00000000000000000000
51 &.;553
7. 7 &&7 1B56(N)
6 37915
/96= 96@(@D)
&9 37915
7. 7 &&/96= 96@(@F)
519 &
7. 7 &&/96= 96@(@F)
.7537 1B56
/96= 96@(@D)
653 9 5
7. 7 && 9 5
L.B3
7. 7 &&/96= 96@( D)
9&96;
7 1B56(O @)
=.11
.73 =
7 1B56(@ @)
1979Q563
7 1B56(N)
5 96 157 3
7 1B56(M)
":
00
2*- +)
7
7 &&R
0000000000000000000000000000000000000 00000000 000000000000000000000000
=. 7 6;3
7. 7 &&= 96(@)
=. 7 6;37915
/96= 96@(MD)
65Q .73
7 1B56
00
:
,) ( : )7
7 &&R
0000000000000000000000000000000000000 00000000 000000000000000000000000
5 96 157 3
7. 7 &&7 1B56(M)
5 96 157 37915
7. 7 &&/96= 96@(2D)
1979Q563
7 1B56(N)
&.=9 .73
7 1B56(M)
00
;2/
7
7 &&R
000000000000000000000000000000000000000 00000000 00000000000000000000000
L.B3
7. 7 &&/96= 96@( D)
L.B3 &5
7. 7 &&/96= 96@(2F)
1 73 9&96;
7 1B56(N)
19>3 9&96;
7 1B56(N)
00
;2/74+ 2 0
7
7 &&R
00000000000000000000000000000000000000 0000000 0000000000000000000000
51 &.;553
7. 7 &&7 1B56(N)
96 3 9 5
7. 7 && 9 5
57 3 9 5
7. 7 && 9 5
L.B3
7. 7 &&/96= 96@( D)
5 96 157 3
7 1B56(M)
00 9
2 ( +27
7 &&R
00000000000000000000000000000000000000000 00000000 00000000000000000000
&.=9 .73
7. 7 &&7 1B56(M)
655 39 65
/96= 96@(MD)
. 9&3=. 5
/96= 96@( @)
= ;
7. 7 &&/96= 96@(2D)
9 53 6./ 7=5
/96= 96@(@F)
=. 7 6;3
= 96(@)
00 7
(
)
)<+27
7 &&R
00000000000000000000000000000000000000000 00000000 00000000000000000000
65Q .73
7. 7 &&7 1B56
65Q .737915
/96= 96@(@F)
(#
0 6
@0 ,
= .796;
:.
M0 6
F0 6
:
1 #
@(
&9 37915
0000000000000000000000000
S
S ##
6 #
:.
4 9&&3 9B&5
5 =6 B5
(1 =
9&&3 9B3=.& 17
6%
(
' J
-1 #
/#
4 L.B
()
( )%
4)
"! ##
&9 37915
0000000000000000000000000
9
=#
4
B
=#
5
()
( )%
&
'
&9 37915
0000000000000000000000000
L#
L
)
&
&9 37915
0000000000000000000000000
4
B
#
D
()
( )%
(
&9 37915
0000000000000000000000000
S#
B
4
=
)
% !
! ##
+#
5 96 157 37915
000000000000000000000000000000
#
)
*
+,--.+
5 96 157 37915
000000000000000000000000000000
6
1 T
4 6
#
N
()
( )%
" /
#)
*
*
&9 37915
=.11
0000000000000000000000000 0000000000000000
Q
D% F
L#
D% D
## 0*
.7
Q
#
B
=4
%%%%
DG
()
A)
7.1
0000000000000000000000000
( )%
"(/
'
Q !
1
1
1 +
.
%%%
F
()
( )%
T)
1
*
(
1
1
&9 37915
0000000000000000000000000
= 4
5 ! !
Q
6
/
*
U T
C
O
()
( )%
3
0
5 96 157 37915
000000000000000000000000000000
=
6
C
N
)
'
()
( )%
0*
*
(
=. 7 (51 &.;553 ) L.B3 &5
000000000000000000 00000000000000000000000000000000000
F9
9
1
9
9
@9
/
1
6
1 T
1 T
C
I
6
1
6
()
( )%
*
*
*
*
$ /
0
&9 37915
655 39 65
0000000000000000000000000 0000000000000000000000000000000000000000
= ;
000000000000000000000000000000
6A
@D
B
#
S
.'
# .'
# .'
.'
#
#
@D
@D
#
%%%
@M
()
( )%
0
*
*
$
(
L.B3 &5
=. 7 (5%51 &.;553 )
00000000000000000000000000000000000 00000000000000000000
9
M
9
1
9
9
9
/
@
1
6
6
1 T
1
1 T
6
F
C
I
()
( )%
*
*
(
/
"
0
(
L.B3 &5
1(5% 9&96;)
00000000000000000000000000000000000 0000000000000
9
9
MMDD
6
6
NFDD
1 T
6
NDDD
4 9
O2DD
4 6
6
DDDD
0 $
TP 2
SQL LDD et Contraintes
*/
*/
create table PERSONNE (
nopers number(6) primary key,
prenom varchar2(20),
nom2fam varchar2(25) not null )
create table SERVICE (
noservice number(4) primary key,
nomservice varchar2(30),
noloc number(6) references LOCALISATION(noloc),
nochef number(6) references PERSONNE(nopers)
)
create table LOCALISATION (
noloc number(6) primary key,
rue varchar2(40) not null,
ville varchar2(30) default Paris )
create table POSTE (noposte varchar2(10) primary key, nomposte varchar2(35))
create table SALAIRE (noposte varchar2(10), noservice number(4,0),
salairemin number(6), salairemax number(6)
constraint CleSalaire primary key(noposte, noservice))
(c) Supprimer le poste intitul Purchasing Manager de la table POSTE. Que se passe-til ? Renoncer la mise jour.
5- Modifier le schma de certaines tables
(a) Ajouter un attribut obsolte la table POSTE qui aura deux valeurs possibles V ou F
selon quun poste est obsolte ou non. La valeur par dfaut sera F.
ALTER TABLE POSTE ADD(obsolete char(1) check obsolete in(V, F)
DEFAULT F
(b) Reconsidrer la question 4.c- aprs cette modification du schma de POSTE : modifier
les tables AFFECTATION, SALAIRE et POSTE de faon pourvoir tenir compte de
la suppression de cette fonction dans lentreprise. Il faut garder les postes devenus
obsoltes, mettre un terme aux affectations les concernant et supprimer les salaires
relatifs aux postes obsoltes. Vrifier.
(c) Ajouter un attribut COURRIEL la table PERSONNE dont confidentiel sera la
valeur par dfaut. Vrifier.
Voir (a)
(d) Renseigner lattribut COURRIEL partir de lattribut EMAIL de la table
HR.EMPLOYEES en compltant chaque valeur de email par la chane
@technissimo.fr. Vrifier.
UPDATE PERSONNE set COURRIEL = HR.EMPLOYEES.EMAIL ||
@technissiomo.fr
6- Supprimer le schma de toutes les tables cres.
Universit de Lorraine
Campus Sciences, FST, Dpartement informatique
TP PL/SQL
Sommaire :
I.
II.
Initiation PL/SQL
Comprendre le passage de paramtres en PL/SQL
I. Initiation PL/SQL
1. Ecrire un bloc PL/SQL qui affiche
Bonjour, je suis Votre Login Oracle
Nous sommes le : Date du jour (sous la forme N-du-jour Nom-du-mois Anne)
set serveroutput on;
begin
dbms_output.put_line('Bonjour');
dbms_output.put_line('Je suis : '|| user);
dbms_output.put_line('Nous sommes le : ' || to_char(sysdate,'dd month yyyy'));
end;
3. Une table produit et une table stock existent ; elles sont la proprit de nacerb et tout utilisateur a
le droit de les interroger. Leur schma est le suivant :
SQL> desc produit
Name
Null? Type
----------------------------------------- -------- ---------------------------PROD#
NOT NULL NUMBER(38)
LIBELLE
VARCHAR2(20)
PU
NOT NULL FLOAT(126)
SQL> desc stock
Name
Null? Type
----------------------------------------- -------- ---------------------------PROD#
NOT NULL NUMBER(38)
DEP#
NOT NULL NUMBER(38)
QTE
NOT NULL NUMBER(38)
3.1. Crer les mmes tables avec leur contenu.
SQL> create table produit as (select * from nacerb.produit) ;
SQL> create table stock as (select * from nacerb.stock);
3.2. Ajouter une colonne TotalEnStock la relation produit :
SQL> alter table produit add (Total_Stock int);
3.3. Instancier cette colonne par la quantit totale en stock pour chaque produit
SQL>
2
3
4
3.3. Programmer et mettre au point un bloc anonyme qui permet dobtenir les 3 produits ayant les
plus grandes quantits en stock.
-- Bloc affichant les 3 produits les plus vendus
-- NE PAS OUBLIER: set serveroutput on;
declare
lib
produit.libelle%type;
-- prix
produit.pu%type;
ventes produit.Total_Des_Ventes%type;
cursor C is
select libelle, Total_Des_Ventes
from produit order by Total_Des_Ventes desc;
begin
dbms_output.put_line('--- Begin');
open C;
if C%ISOPEN
then
dbms_output.put_line('--- ISOPEN = Vrai');
for i in 1..3
loop
dbms_output.put_line('--- Avant fetch');
fetch C into lib, ventes;
if C%found
then
dbms_output.put_line('Produit: '|| lib);
dbms_output.put_line('vendu en : '|| ventes || ' exemplaires.');
else
dbms_output.put_line('Relation vide; Nbr de tuples = '||i);
end if;
end loop;
else
dbms_output.put_line('Erreur sur open curseur');
end if;
close C;
end;
3.4. Transformer le bloc de la question prcdente en une procdure Top_stock qui permet
dobtenir les n produits les plus prsents en stock, n tant un paramtre de la procdure.
create or replace procedure i_Produit_Min (i IN int)
/*----------------------------------------------------*/
/* Sortir les i produits ayant les plus hauts niveaux en stock */
/* Exemple d'invocation: exec i_Produit_Min(3);
*/
/*----------------------------------------------------*/
as
NomProd produit.libelle%TYPE;
Qte stock.qte%TYPE;
j number;
cursor MonCurseur is
select s.prod#, sum(qte) "Total"
from produit p, stock s
where p.prod# = s.prod#
group by s.prod#
order by sum(qte) desc;
begin
open MonCurseur;
j := i;
fetch MonCurseur into NomProd, Qte;
while (j > 0) and MonCurseur%FOUND
loop
DBMS_OUTPUT.PUT_LINE('Somme des stocks du produit ' || NomProd || ': '
|| TO_CHAR(Qte, '99999999'));
fetch MonCurseur into NomProd, Qte;
j := j - 1;
end loop;
close MonCurseur;
end;
- x3 (out) = Valeur de x3
Incrmente x1 de 1, x2 de 10 et affecte 300 x3
Affiche les valeurs des paramtres sous la forme :
Valeurs des paramtres en sortie de P :
- x1 (in) = Valeur de x1
- x2 (in out) = Valeur de x2
- x3 (out) = Valeur de x3
2. Ecrire un bloc PL/SQL qui appelle la procdure P avec des paramtres Y1, Y2, Y3 et qui affiche
les valeurs de Y1, Y2, Y3 avant et aprs lappel P sous la mme forme que P. Commenter et
dmontrer les rsultats.
declare
Y1 int; Y2 int; Y3 int;
begin
Y1 := 1; Y2 := 20; Y3 :=
dbms_output.put_line('Y1
dbms_output.put_line('Y2
dbms_output.put_line('Y3
dbms_output.put_line('-P(Y1, Y2, Y3);
dbms_output.put_line('-dbms_output.put_line('Y1
dbms_output.put_line('Y2
dbms_output.put_line('Y3
end;
0;
(in) = ' || Y1 ||' (valeur avant appel de P)');
(in out) = ' || Y2 ||' (valeur avant appel de P)');
(out) = ' || Y3 ||' (valeur avant appel de P)');
Le bloc appelle la procedure P :');
retour dans le bloc apres appel de la procedure P :');
(in) = ' || Y1 ||' (valeur au retour de P)');
(in out) = ' || Y2 ||' (valeur au retour de P)');
(out) = ' || Y3 ||' (valeur au retour de P)');
Excution :
-Y1
Y2
Y3
-x1
x2
x3
x1
x2
x3
-Y1
Y2
Y3