Documente Academic
Documente Profesional
Documente Cultură
M QBADOU
Professeur M.QBADOU
ORACLE PL/SQL
Sommaire
1. Introduction PL/SQL
7. Exceptions
8. Transactions
9. Dclencheurs (triggers)
2. Variables
3. structures de contrle
4. Curseurs
Curseurs implicites/Explicites
Curseurs paramtrs
5. Sous-programmes
Procdures et Fonctions
Paquetages (packages)
Professeur M.QBADOU
ORACLE PL/SQL
Objectifs
Le cours a pour objectifs :
Identifier les diffrentes parties dun bloc PL/SQL
Spcifier et dclarer des variables PL/SQL, utiliser les types PL/SQL, et
en particulier les types implicites (%type, %rowtype)
Ecrire des programmes stocks en PL/SQL : procdures, fonctions,
paquetages
Comprendre et Manipuler des curseurs (Cursor)
ORACLE PL/SQL
Introduction PL/SQL
PL/SQL cest quoi
PL/SQL : Procedural Language / Structured Query Language
Langage procdural qui reprsente une extension SQL
Professeur M.QBADOU
ORACLE PL/SQL
Introduction PL/SQL
Avantages de PL/SQL
Intgration parfaite de l SQL ce qui permet PL/SQL de raliser
des traitements complexes sur les donnes de la base
Modulaire et Support bien la POO puissance de la POO
Offre une bonne performance : transmission dun bloc de code au
moteur de base de donnes
rduit le trafic entre les applications et le serveur
diminue les changes rseau
ORACLE PL/SQL
Introduction PL/SQL
Le PL/SQL peut tre utilis sous 3 formes :
Un bloc de code, excut comme une commande SQL, via un
interprteur standard (SQL+ ou iSQL*Plus, SQL Developer).
ORACLE PL/SQL
Introduction PL/SQL
Architecture de PL/SQL
Moteur PL/SQL
Bloc
PL/SQL
Procdural
SQL
Instructions
Procdurales
Data
Bloc
PL/SQL
Instructions SQL
Moteur SQL
Serveur Oracle
Professeur M.QBADOU
ORACLE PL/SQL
Introduction PL/SQL
Type de bloc PL/SQL
Anonyme
Bloc sans nom
PLSP
Equivalent en PL des ASP ou JSP. Ddi aux applications pour
Internet ou la tlphonie mobile.
Professeur M.QBADOU
ORACLE PL/SQL
Introduction PL/SQL
Types de bloc PL/SQL
Les types de Blocs sont:
[ DECLARE ]
BEGIN
--Instructions;
PROCEDURE nom
IS
BEGIN
--Instructions;
[ EXCEPTION ]
[ EXCEPTION ]
END;
END;
Professeur M.QBADOU
Fonction
Procdure
Anonyme
ORACLE PL/SQL
FUNCTION nom
RETURN datatype
IS
BEGIN
--Instructions;
RETURN val;
[ EXCEPTION ]
END;
Introduction PL/SQL
Structure dun bloc PL/SQL
PL/SQL est un langage structur en blocs, constitus densemble
dinstructions.
Une section
Dclarative:
facultative, de
dclaration et
initialisation de type,
variables et constantes.
Professeur M.QBADOU
Une section
excutable:
obligatoire,
contenant les
instructions
dexcutions.
ORACLE PL/SQL
Une section
dexception:
facultative, pour la
gestion derreurs.
10
Introduction PL/SQL
Structure dun bloc PL/SQL
Bloc PL/SQL
[ DECLARE
--Dclaration et initialisation des variables, curseurs,
exceptions, fonctions
BEGIN
--Instructions Excutables (sql ou pl/sql)
[ EXCEPTION
--Interception des erreurs (actions raliser
lorsquune erreur se produit
]
END;
Professeur M.QBADOU
ORACLE PL/SQL
11
Introduction PL/SQL
Structure dun bloc PL/SQL minimum
Bloc PL/SQL
--Dbut de la section des instructions excutables
BEGIN
NULL; --Aucune Action
--La fin de la section des instructions excutables
END;
Professeur M.QBADOU
ORACLE PL/SQL
12
Introduction PL/SQL
Exemple de bloc PL/SQL
Set ServerOutput on
DECLARE
v_variable1
NUMBER;
v_variable2
NUMBER;
v_variable3
NUMBER;
excep1
EXCEPTION;
BEGIN
IF (v_variable2 <> 0) THEN
v_variable3 := v_variable1/v_variable2;
ELSE
RAISE excep1;
END IF;
EXCEPTION
WHEN excep1 THEN
DBMS_OUTPUT.PUT_LINE('Erreur');
END;
Professeur M.QBADOU
ORACLE PL/SQL
13
Package DBMS_OUTPUT
Procdures du Package DBMS_OUTPUT
Doit tre autorise sous SQL*PLUS laide de:
SET SERVEROUTPUT ON
Procdure
Action
GET_LINE
GET_LINES
NEW_LINE
PUT
PUT_LINE
ENABLE
ENABLE(taille du tampon)
DISABLE
Professeur M.QBADOU
ORACLE PL/SQL
14
Classification
Utilisation
Variables PL/SQL
Typage dynamique
ORACLE PL/SQL
15
Professeur M.QBADOU
ORACLE PL/SQL
16
Professeur M.QBADOU
ORACLE PL/SQL
17
Professeur M.QBADOU
ORACLE PL/SQL
18
Professeur M.QBADOU
ORACLE PL/SQL
19
Les noms des variables doivent tre diffrents des noms des
colonnes des tables utilises dans un bloc
v_empno (variable)
g_deptno (globale)
c_emp (CURSOR)
Professeur M.QBADOU
ORACLE PL/SQL
20
Professeur M.QBADOU
ORACLE PL/SQL
21
Type LOB:
Il s'agit d'un localisateur spcifiant la localisation dobjets de grande
taille (des images, des vidos, )
BFILE: stocke la rfrence dun fichier du systme dexploitation.
BLOB: permet de stocker un objet binaire jusqu 4 GO.
CLOB: Pour stocker un ensemble de caractres, jusqu 4 GO.
NCLOB: Pour stocker un ensemble de caractres, cods sur un ou
plusieurs octets, jusqu 4 GO.
Professeur M.QBADOU
ORACLE PL/SQL
22
V_nombre1
V_nombre2
V_sal
Professeur M.QBADOU
NUMBER(7,2);
V_nombre1%type := 10;
employee.salaire%type;
ORACLE PL/SQL
23
scott.emp.ename%TYPE;
emp.job%TYPE;
NUMBER( 7, 2 );
balance%TYPE := 10;
emp%ROWTYPE
Facilite la maintenance.
Professeur M.QBADOU
ORACLE PL/SQL
24
ORACLE PL/SQL
25
CHAR( 1 );
VARCHAR2(10) := 'Scott';
BINARY_INTEGER := 0;
NUMBER( 9, 2 ) := 0;
DATE := SYSDATE + 7;
DATE;
CONSTANT NUMBER ( 3, 2 ) := 3.14;
BOOLEAN NOT NULL := TRUE;
NUMBER(3) NOT NULL := 201;
NUMBER(4) := 2*100;
DATE :=TO_DATE('17-OCT.-01','DD-MON-YY');
NUMBER := 10;
NUMBER := 20;
BOOLEAN := (v1>v2);
BOOLEAN := (z IS NOT NULL);
ORACLE PL/SQL
26
Professeur M.QBADOU
ORACLE PL/SQL
27
Professeur M.QBADOU
ORACLE PL/SQL
28
DECLARE
DECLARE
.
/
Professeur M.QBADOU
ORACLE PL/SQL
29
1: 10
ancien
Nouveau
DEPTNO DNAME
LOC
Professeur M.QBADOU
NEW YORK
ORACLE PL/SQL
30
SQL> BEGIN
2
END;
SQL> VARIABLE
variable
x
datatype
NUMBER
Professeur M.QBADOU
ORACLE PL/SQL
31
ORACLE PL/SQL
32
Professeur M.QBADOU
ORACLE PL/SQL
33
Exemple
SQL> SELECT * FROM DEPT WHERE DEPTNO = '&1';
SQL> SAVE ma_requete
20
old
new
DEPTNO DNAME
LOC
20 RESEARCH
Professeur M.QBADOU
DALLAS
ORACLE PL/SQL
34
Section Excutable
Dfinition
Les instructions
Exemples
Professeur M.QBADOU
ORACLE PL/SQL
35
Section Excutable
Dlimite par les mots cl BEGIN et END; elle contient :
les instructions d'excution du bloc PL/SQL,
les instructions de contrle et d'itration,
l'appel des procdures et fonctions, l'utilisation des fonctions
natives,
les ordres SQL, etc.
Chaque instruction doit tre suivi du terminateur d'instruction ; .
ORACLE PL/SQL
36
Section Excutable
Fonctions SQL en PL/SQL:
Fonctions Disponibles:
Mono-ligne Numrique.
Comme
Mono-ligne Caractre.
en SQL
Conversion de type de donnes
Date
Fonctions non Disponibles :
Fonctions de groupe.
Exemples:
V_name := LOWER(v_ename);
V_date := TO_DATE( 01 Janvier 1999 , DD Month YYYY);
v_chaine := concat(Base, Donnes);
Commenter le code:
Commencer les commentaires sur une ligne avec deux tirets (--).
Placer les commentaires s tendant sur plusieurs lignes entre les
symboles /* et */.
Professeur M.QBADOU
ORACLE PL/SQL
37
Section Excutable
La conversion de types de donnes:
est ralise:
Soit de manire implicite, par le systme. Les conversions
fonctionnent selon des rgles prcises.
Soit de manire explicite par lutilisateur. Elle se fait au moyen des
fonctions de conversion.
La conversion implicite:
Pour laffectation:
DE
VERS
VARCHAR2 ou CHAR
NUMBER
VARCHAR2 ou CHAR
DATE
NUMBER
VARCHAR2
DATE
VARCHAR2
Professeur M.QBADOU
VERS
VARCHAR2 ou CHAR
NUMBER
VARCHAR2 ou CHAR
DATE
ORACLE PL/SQL
38
Section Excutable
Oprateurs en PL/SQL:
Logiques
Arithmtiques
Concatnation
Parenthses pour contrler lordre des
oprations
Identiques
ceux de
SQL
Exemples:
Incrmenter lindex pour une boucle:
v_count := v_count+1;
Dfinir la valeur dun indicateur boolen:
v_equal := (v_n1 = v_n2);
Valider le numro dun employ sil contient une valeur:
v_valid := (v_empno IS NOT NULL);
Professeur M.QBADOU
ORACLE PL/SQL
39
Section Excutable
Blocs imbriqus et porte des variables:
Professeur M.QBADOU
ORACLE PL/SQL
40
Section Excutable
DECLARE
v_nombre NUMBER := 600;
v_message VARCHAR2(100):=Message Principal;
v_test VARCHAR2(30) := True;
BEGIN
Sous-Bloc
Bloc Principal
DECLARE
v_nombre NUMBER :=1;
v_message VARCHAR2(100):=Message second;
v_local VARCHAR2(100):=Message Interne;
BEGIN
v_nombre:=v_nombre+1;
v_local:=MSG1: ||v_local;
END;
v_nombre:=v_nombre+1;
v_message:=v_message||MSG2;
v_local:=MSG3||v_local;
END;
Professeur M.QBADOU
ORACLE PL/SQL
41
Section Excutable
Les instructions :
Linstruction: Assignation (affectation)
Pour affecter une valeur une variable, on utilise :
Loprateur daffectation PL/SQL :=
Linstruction SELECTINTO ;
Linstruction FETCH (cette instruction sera vue avec plus de
dtails dans la partie ddie aux curseurs)
Exemple:
DECLARE
v_salaire NUMBER(4) ;
v_empno emp.empno%TYPE ;
BEGIN
v_salaire := 1100;
SELECT empno INTO v_empno
FROM emp
WHERE sal := v_salaire;
END;
Professeur M.QBADOU
ORACLE PL/SQL
42
Section Excutable
L instruction: Commit
Permet d'enregistrer dans la base toutes les modifications effectues
au cours de la transaction.
Un commentaire d'un maximum de 50 caractres peut apparatre
entre apostrophes derrire le mot cl COMMENT.
Syntaxe:
COMMIT [COMMENT 'Message'];
Professeur M.QBADOU
ORACLE PL/SQL
43
Section Excutable
Linstruction: Exit:
Syntaxe:
Exit [label] WHEN expression_booleene;
Permet de quitter une structure itrative.
label facultatif permet de nommer prcisment la
structure de laquelle on veut sortir.
expression boolenne permet de spcifier une condition
de sortie.
Exit saute l'instruction suivant le mot cl END LOOP;
Dans le cas de boucles imbriques, l'indication d'un label permet
de quitter tout ou partie des boucles imbriques
Professeur M.QBADOU
ORACLE PL/SQL
44
Section Excutable
Linstruction: IF ELSE END IF
Syntaxe:
IF exp_booleene
instructions ;
ELSIF exp_booleene
instructions ;
ELSE
instructions ;
END IF ;
THEN
THEN
ORACLE PL/SQL
45
Section Excutable
Linstruction: CASE
Cette instruction, utilisable aussi dans les requtes SQL, permet de
mettre en place une structure slective :
Syntaxe:
CASE selecteur
WHEN val1 THEN
instruction;
WHEN val2 THEN
instruction;
...
ELSE
instruction;
END CASE;
ORACLE PL/SQL
46
Section Excutable
Linstruction: LOOP END LOOP;
Cette instructions met en place une boucle o aucune condition de sortie
n'est indique. linstruction EXIT permet de sortir de la boucle.
Syntaxe:
LOOP
instructions;
cpt := cpt + 1 ;
dbms_output.put_line( to_char( cpt) ) ;
exit when cpt > 2 ;
End loop ;
End ;
Professeur M.QBADOU
ORACLE PL/SQL
47
Section Excutable
Linstruction: WHILE condition LOOP
END LOOP;
End ;
Professeur M.QBADOU
ORACLE PL/SQL
48
Section Excutable
Linstruction: For IN LOOP END LOOP
Cette instruction permet de mettre en place une boucle dont le nombre
d'itrations est fix ds l'entre.
Syntaxe:
FOR variable_index IN [REVERSE] borne_dbut .. borne_fin
LOOP
instructions;
END LOOP;
Variable_index reprsente le nom de la variable qui servira d'indice.
Cette variable ne ncessite pas de dfinition pralable dans la section
dclarative
Reverse permet de faire varier l'indice dans le sens contraire
(dcrmentation)
ORACLE PL/SQL
49
Section Excutable
Boucles Imbriques et Labels
Boucles imbriques des niveaux multiples
Utiliser des labels pour distinguer les blocs et les boucles
Professeur M.QBADOU
ORACLE PL/SQL
50
Section Excutable
Boucles imbriques
BEGIN
FOR v_outerloopcounter IN 1..2 LOOP
FOR v_innerloopcounter IN 1..4 LOOP
DBMS_OUTPUT.PUT_LINE(
'Outer Loop counter is ' || v_outerloopcounter ||
' Inner Loop counter is ' || v_innerloopcounter);
END LOOP;
END LOOP;
END;
/
Outer
Outer
Outer
Outer
Outer
Outer
Outer
Outer
Loop
Loop
Loop
Loop
Loop
Loop
Loop
Loop
Professeur M.QBADOU
counter
counter
counter
counter
counter
counter
counter
counter
is
is
is
is
is
is
is
is
1
1
1
1
2
2
2
2
Inner
Inner
Inner
Inner
Inner
Inner
Inner
Inner
Loop
Loop
Loop
Loop
Loop
Loop
Loop
Loop
ORACLE PL/SQL
counter
counter
counter
counter
counter
counter
counter
counter
is
is
is
is
is
is
is
is
1
2
3
4
1
2
3
4
51
Section Excutable
Exemple : Boucles Imbriques et Labels
Quitter la boucle extrieure daprs les valeurs d'un bloc interne :
BEGIN
<<outerloop>>
FOR v_outerloopcounter IN 1..2 LOOP
<<innerloop>>
FOR v_innerloopcounter IN 1..4 LOOP
DBMS_OUTPUT.PUT_LINE(
'Outer Loop counter is ' || v_outerloopcounter ||
' Inner Loop counter is ' || v_innerloopcounter);
EXIT outerloop WHEN v_innerloopcounter = 3;
END LOOP innerloop;
END LOOP outerloop;
END;
/
Outer Loop counter is 1 Inner Loop counter is 1
Outer Loop counter is 1 Inner Loop counter is 2
Outer Loop counter is 1 Inner Loop counter is 3
Professeur M.QBADOU
ORACLE PL/SQL
52
Section Excutable
Linstruction: NULL
Cette instruction n'excute rien et n'a aucun effet.
Linstruction: RAISE
Cette instruction permet de gnrer une exception
RAISE nom_exception;
nom exception reprsente soit le nom d'une exception prdfinie, soit
une exception utilisateur dfinie dans la section dclarative
LInstruction: RETURN
Cette instruction permet de sortir d'une procdure ou d'une fonction
RETURN expression;
ORACLE PL/SQL
53
Section Excutable
Linstruction: SAVEPOINT
Cette instruction permet de placer une tiquette savepoint dans le
corps du code.
Elle permet au traitement d'annuler, avec l'instruction ROLLBACK, les
modifications effectues partir de cette tiquette
ORACLE PL/SQL
54
Section Excutable
Instruction SQL
Reprsente toute instruction SQL valide.
INSERT
UPDATE
DELETE
Exemple:
Declare
v_message VARCHAR2(60):='Mise jour effectue';
Begin
update emp
set sal=5000
where empno=7200;
dbms_output.put_line( v_message ) ;
End ;
Professeur M.QBADOU
ORACLE PL/SQL
55
Section Excutable
Linstruction: SELECT INTO From
Slection d'une ou de plusieurs lignes.
SELECT salaire INTO v_sal
FROM employee;
Cet ordre ne doit ramener qu'une ligne sous peine de gnrer l'exception
NO_DATA_FOUND si aucune ligne n'est ramene ou TOO_MANY_ROWS si
plus d'une ligne sont ramenes .
Utilise avec la clause BULK COLLECT, elle permet de charger une collection
avec les lignes ramenes.
Exemple:
Declare
type
type_tab_emp
IS TABLE OF emp%rowtype
INDEX BY pls_integer;
r_emp type_tab_emp;
BEGIN
select * bulk collect into r_emp from emp;
FOR i IN 1..r_emp.count LOOP
dbms_output.put_line( To_char( r_emp(i).empno ) || ' - ' || r_emp(i).ename ) ;
END LOOP ;
END;
Professeur M.QBADOU
ORACLE PL/SQL
56
Section Excutable
v_name VARCHAR2(10);
Affectation
BEGIN
SELECT ename INTO v_name
WHEN OTHERS
THEN NULL;
END;
/
Professeur M.QBADOU
ORACLE PL/SQL
57
Section Excutable
Exemple2 : Cas plusieurs variables :
DECLARE
v_ename
VARCHAR2(12);
v_sal NUMBER(7,2);
BEGIN
SELECT
EXCEPTION
WHEN OTHERS
THEN NULL;
END;
/
Professeur M.QBADOU
ORACLE PL/SQL
58
Section Excutable
Exemple3 :Exception TOO_MANY_ROWS
SET SERVEROUTPUT ON
DECLARE
v_nom VARCHAR2(10);
v_sal VARCHAR2(10);
BEGIN
SELECT ename,sal INTO v_nom,v_sal
/
Professeur M.QBADOU
ORACLE PL/SQL
59
DECLARE
OPEN
FETCH
Existence?
CLOSE
Non
Crer une
zone SQL
nomme
Professeur M.QBADOU
Identifier
lensemble actif
de lignes
Charger la ligne
courante dans
des variables
ORACLE PL/SQL
Librer
lensemble
actif
60
ORACLE PL/SQL
61
CLOSE nom_curseur;
Professeur M.QBADOU
ORACLE PL/SQL
62
Professeur M.QBADOU
ORACLE PL/SQL
63
END LOOP;
Simplification dcriture pour les curseurs explicites.
Ouverture, fetch et fermeture implicites du curseur.
Le record est dclar implicitement.
Professeur M.QBADOU
ORACLE PL/SQL
64
ORACLE PL/SQL
65
CURSOR c_emp IS
select empno from emp;
r_emp c_emp%ROWTYPE;
v_sal
emp.sal%TYPE;
v_ename emp.ename%TYPE;
BEGIN
open c_emp;
loop
fetch c_emp into r_emp;
select sal, ename into v_sal, v_ename from emp
where empno=r_emp.empno
;
dbms_output.put_line( Fin);
EXIT When c_emp%NOTFOUND;
end loop;
END.
Professeur M.QBADOU
ORACLE PL/SQL
66
BEGIN
open c_examen; --ouverture du curseur
loop --boucle sur les lignes
--lecture dune ligne
fetch c_examen into v_num_exam, v_date, v_sale;
--sortir lorsque le curseur ne ramne pas de ligne
EXIT When c_emp%NOTFOUND;
end loop;
close c_examen; --fermeture du curseur
END;
Professeur M.QBADOU
ORACLE PL/SQL
67
PL/SQL - Partie II
Paramtres
Exemples
Java et PL/SQL
Enveloppes PL/SQL
Professeur M.QBADOU
Curseurs en PL/SQL
ORACLE PL/SQL
68
ORACLE PL/SQL
69
Procdure interne
DECLARE
x VARCHAR2(5);y VARCHAR2(5);
PROCEDURE EcrireTexte (str IN VARCHAR2) IS
BEGIN
DBMS_OUTPUT.PUT_LINE(str);
END EcrireTexte;
BEGIN
x := 'maman'; y := 'maman';
IF x = y THEN
EcrireTexte ('Egaux');
ELSE
EcrireTexte ('Pas gaux');
END IF;
EcrireTexte (LENGTH(x));EcrireTexte (LENGTH(y));
END;
/
Professeur M.QBADOU
ORACLE PL/SQL
70
ORACLE PL/SQL
71
ORACLE PL/SQL
72
RETURN NUMBER AS
BEGIN
DBMS_OUTPUT.PUT_LINE('CallFunc called with ' || p1);
RETURN p1;
END CallFunc;
/
CALL CallFunc(1) INTO :x;
PRINT :x
1
Professeur M.QBADOU
ORACLE PL/SQL
73
1
CALL CallProc(:x);
PRINT :x
2
Professeur M.QBADOU
ORACLE PL/SQL
74
Professeur M.QBADOU
ORACLE PL/SQL
75
END math;
/
CREATE OR REPLACE PACKAGE BODY math AS|IS
ORACLE PL/SQL
76
s NUMBER DEFAULT 0;
BEGIN
math.add ( 1,s);
math.add ( 5,s);
math.add (20,s);
DBMS_OUTPUT.PUT_LINE (s);
END;
/
26
Professeur M.QBADOU
ORACLE PL/SQL
77
GRANTOR
GRANTEE
FROM DBA_TAB_PRIVS
WHERE grantee='tp12_1';
GRANTEE
PRIVILEGE TABLE_NAME
EXECUTE
MATH
ORACLE PL/SQL
78
Outils :
Oracle dispose d'un nouveau produit appel JServer, qui se
compose des lments suivants:
Oracle Java Virtual Machine (JVM), appele Aurora, l'environnement
d'excution et de bibliothques de classes Java
Object Request Broker (l'Aurora / ORB) et Enterprise JavaBeans (EJB)
L'acclrateur JServer (compilateur natif)
Professeur M.QBADOU
ORACLE PL/SQL
79
ORACLE PL/SQL
80
ORACLE PL/SQL
81
Exemples :
...>sqlplus sys/sysadmin2013 as sysdba
sql>grant JAVAUSERPRIV to tp12_2;
Professeur M.QBADOU
ORACLE PL/SQL
82
Professeur M.QBADOU
ORACLE PL/SQL
83
Professeur M.QBADOU
ORACLE PL/SQL
84
ORACLE PL/SQL
85
ORACLE PL/SQL
86
PLTOMAJ(JOB)
------------------------- -----------king
Professeur M.QBADOU
PRESIDENT
ORACLE PL/SQL
87
Professeur M.QBADOU
ORACLE PL/SQL
88
RECORDS
TABLES
NESTED TABLE
VARRAY
ASSOCIATIVE ARRAY
Professeur M.QBADOU
ORACLE PL/SQL
89
RECORDS
Collections
TABLES
NESTED TABLE
VARRAY
ASSOCIATIVE ARRAY
Professeur M.QBADOU
ORACLE PL/SQL
90
Professeur M.QBADOU
ORACLE PL/SQL
91
type_name;
emp_record_type IS RECORD
( ename
VARCHAR2( 25 ),
job
VARCHAR2( 25 ),
sal
NUMBER( 7,2 ) );
employee_record
.../...
Professeur M.QBADOU
emp_record_type;
ORACLE PL/SQL
92
Professeur M.QBADOU
ORACLE PL/SQL
93
DECLARE
dept_rec
empl_rec
Professeur M.QBADOU
dept%ROWTYPE;
empl%ROWTYPE;
ORACLE PL/SQL
94
DECLARE
TYPE emp_record_type IS RECORD
( ename
VARCHAR2( 25 ),
job
VARCHAR2( 25 ),
sal
NUMBER( 7,2 )
);
employee_record emp_record_type;
BEGIN
SELECT ename,job,sal -- une seule ligne!
INTO employee_record
FROM emp
WHERE empno = 7839;
DBMS_OUTPUT.PUT_LINE(employee_record.ename);
DBMS_OUTPUT.PUT_LINE(employee_record.job);
DBMS_OUTPUT.PUT_LINE(employee_record.sal);
END;
/
PRESIDENT 5000
Professeur M.QBADOU
ORACLE PL/SQL
95
Professeur M.QBADOU
ORACLE PL/SQL
96
Clef Primaire
Colonne
Une colonne
... de type scalaire ou record ...
1
SCOTT
SMITH
KING
...
...
BINARY_INTEGER
Professeur M.QBADOU
ORACLE PL/SQL
Scalaire
97
Colonne
...
SCOTT
SMITH
KING
...
...
BINARY_INTEGER
Professeur M.QBADOU
ORACLE PL/SQL
Scalaire
98
Professeur M.QBADOU
ORACLE PL/SQL
99
Professeur M.QBADOU
text_table_type;
text_table_type;
ORACLE PL/SQL
100
BEGIN
arrayOfCst(1)
arrayOfCst(2)
arrayOfCst(3)
arrayOfCst(4)
arrayOfCst(5)
arrayOfCst(6)
Professeur M.QBADOU
:= 1.330274429;
:= -1.821255978;
:= 1.781477937;
:= -0.356563782;
:= 0.319381530;
:= 0.0;
ORACLE PL/SQL
101
ORACLE PL/SQL
102
ORACLE PL/SQL
103
ORACLE PL/SQL
104
ORACLE PL/SQL
105
DBMS_OUTPUT.PUT_LINE(deptTable.COUNT);
SELECT * INTO deptTable(1) FROM dept WHERE ROWNUM = 1;
DBMS_OUTPUT.PUT_LINE(deptTable.COUNT);
DBMS_OUTPUT.PUT_LINE(deptTable(1).deptno);
DBMS_OUTPUT.PUT_LINE(deptTable(1).loc);
DBMS_OUTPUT.PUT_LINE(deptTable(1).dname);
END;
/
Professeur M.QBADOU
ORACLE PL/SQL
106
ORACLE PL/SQL
107
z := z + empArray(j).sal;
END LOOP;
Professeur M.QBADOU
ORACLE PL/SQL
108
ORACLE PL/SQL
109
END afficher;
MEMBER PROCEDURE setAdresse(add tadresse) IS
BEGIN
addr:=add;
END afficher;
MAP MEMBER FUNCTION comparer return number IS
BEGIN
return code;
END comparer;
END;
/
Professeur M.QBADOU
ORACLE PL/SQL
110