Vous êtes sur la page 1sur 26

LES CURSEURS PARAMETRES

Il est possible de paramtrer un curseur pour une utilisation commune plusieurs


traitements.
Syntaxe dclaration
DECLARE
CURSOR <nom_curseur> (p1 type_p1 [,p2 type_p2 [, ]) IS
SELECT
FROM
WHERE <condition qui utilisent les paramtres>
;
Utilisation du curseur paramtr
BEGIN
OPEN <nom_cur>(val1,[,val2 [,]);
FETCH <nom_cur>
INTO ;
CLOSE <nom_cur>;
END;

LES CURSEURS PARAMETRES


Parcours d'un curseur paramtr
FOR compteur IN <nom_curseur> (val1 [,val2, ])
LOOP

END LOOP
Exemple
DECLARE
CURSOR c_emp(p_titre varchar2) IS
SELECT nom , salaire , titre
FROM e_emp
WHERE titre=p_titre;
BEGIN
FOR enr IN c_emp('&v_titre')
LOOP
DBMS_OUTPUT.PUT_LINE('Employ : '||enr.nom||' Salaire : '||enr.salaire);
END LOOP
END;

LES CURSEURS EXPLICITES - OPTIONS


Clause CURRENT OF
Rfrencer une ligne d'un curseur pour UPDATE ou DELETE
Rserver une ligne lors de la dclaration du curseur par le
positionnement d'un verrou.
Le verrou concerne toutes les colonnes de la ligne

Les verrous utiliss sont


FOR UPDATE [ OF col1,col2, ]
FOR DELETE

LES CURSEURS EXPLICITES - OPTIONS


Clause CURRENT OF - Exemple
DECLARE
CURSOR c_emp IS
SELECT * FROM emp WHERE salaire < 2000
FOR UPDATE OF salaire;
enr c_emp%ROWTYPE;
BEGIN
OPEN c_emp;
LOOP
FETCH c_emp INTO enr ;
EXIT WHEN c_emp%NOTFOUND;
UPDATE e_emp
SET salaire=salaire*1.1
WHERE CURRENT OF c_emp;
END LOOP;
END;

LES VARIABLES DE TYPE CURSEUR


Disponible depuis la version 7.3 d'Oracle

Variable curseur

Elle est dynamique, car elle n'est lie aucune requte


Syntaxe
1. TYPE <nom_type> IS REF CURSOR [RETURN
type_retour];
2. <var_curseur> <nom_type>;
une ligne d'une table
type_retour
un type record
Exemple
DECLARE
TYPE emptype IS REF CURSOR;
emp_vc emptype;

LES VARIABLES DE TYPE CURSEUR

COMMANDES UTILISEES
POUR VARIABLES CURSEURS

OPEN <nom_var_cur>
FOR <ordre_select> ;

FETCH <nom_var_cur>
INTO <nom_var_hte> ;

CLOSE <nom_var_cur>

LES VARIABLES DE TYPE CURSEUR


Exemple
DECLARE
TYPE r_type IS RECORD (num client.cnum%TYPE,nom client.cnom%TYPE);
enr r_type;
TYPE varcur IS REF CURSOR RETURN enr%TYPE ;
choix number(1) :=&choix ;
BEGIN
IF choix=1 THEN
OPEN varcur FOR SELECT no,nom FROM client ;
ELSIF choix=2 THEN
OPEN varcur FOR SELECT no,nom FROM service ;
ELSIF choix=3 THEN
OPEN varcur FOR SELECT no,nom FROM produit ;

END;

GESTION DES TRANSACTIONS

TRANSACTION

COMMIT
Valider une
transac.

ROLLBACK
Annuler une
transac.

Ensemble de mises jour


effectues sur une base locale
ou distante.

SAVEPOINT
Dbuter une
sous transac.
GESTION
LOCK TABLE
Verrouiller une
table
ROLLBACK TO
Annnuler une
sous transac.

GESTION DES TRANSACTIONS


CONNECT username/password
UPDATE table ;
-- dbut transaction 1
INSERT INTO table ;
COMMIT ;
-- fin de la transaction 1 avec validation
INSERT INTO table ;
UPDATE table ;
ROLLBACK ;

-- dbut transaction 2

INSERT INTO table ;


UPDATE table ;
SAVEPOINT sp1 ;
DELETE FROM table ;
ROLLBACK TO sp1 ;
UPDATE table ;
COMMIT ;

-- dbut transaction 3

-- fin transaction 2 avec annulation

-- dbut sous transaction 3.1


-- annulation de la sous transaction 3.1
-- fin transaction 3 avec validation

GESTION DES TRANSACTIONS

Dans un bloc PL/SQL, la gestion des transactions se fait entre BEGIN et END.
DECLARE

BEGIN
UPDATE e_service
SET nom='Marketing'
WHERE no=32;

COMMIT;
END;
/

-- Pose d'un verrou sur les donnes

-- Validation et suppression du verrou

LES TRAITEMENTS STOCKES


Une entit stocke
dans la base

Physiquement, le stockage se fait


dans les tables du dictionnaire

OBJET STOCKE

PROCEDURE

FONCTION

PACKAGE

TRIGGER

Rle est d'effectuer


un traitement

Rle est d'effectuer


un traitement pour
renvoyer une valeur

Regroupement
d'un ensemble de
procdures et /ou
fonctions

Traitement
dclench suite
une mise
jour

LES TRAITEMENTS STOCKES


Analyse des requtes des BL PLS dj
effectue

Diminution du trafic Client/Serveur sur


le rseau

Intrts des
objets stocks

Gestion centralise de la cohrence des


donnes de la base

Possibilits de surcharge des


procdures et des fonctions.

LES TRAITEMENTS STOCKES


Mode
Interactif

D'autres procdures et
fonctions

APPEL
FONCTION/PROCEDURE
Programme
hte
PRO*

Trigger

Application
FORMS/REPORTS

LES PROCEDURES
Syntaxe
CREATE [ OR REPLACE ] PROCEDURE [<user>].<nom_proc>
(arg1 IN type1 [DEFAULT val_initiale [, arg2 OUT type2 [, arg3 IN OUT type3, ])
AS
[ Dclarations des variables locales ]
BEGIN
Contenu du bloc PLS
END [<nom_proc>];

LES PROCEDURES

Argument
IN
OUT
IN OUT
TYPE
DEFAULT
AS

Signification
Valeur par dfaut.
Argument en entre.
Elle ne tre modifie par la procdure.
Argument en sortie.
Argument en entre sortie.
Elle peut tre lue et modifie par la procdure.
Type de l'argument sans spcification de la taille.
Affecte une valeur par dfaut l'argument.
Permet la dfinition de la procdure.
IS pour les anciennes versions.

LES PROCEDURES Exemple


Exemple Compter le nombre d'employs pour un dpartement donn.
CREATE OR REPLACE PROCEDURE proc_dept (p_no IN dept.deptno%TYPE)
AS
v_no NUMBER;
BEGIN
SELECT COUNT(no)
INTO v_no
FROM emp
WHERE deptno=no;
DBMS_OUTPUT.PUT_LINE('Nombre d'employs : '||' '||v_no);
END;
/

LES PROCEDURES Oprations de base


Mode SQLPLUS
EXECUTE [owner.]<nom_proc> (liste arguments rels);

Excution
Appel dans un bloc PLS
[owner.]<nom_proc> (liste arguments rels;

Mode SQLPLUS

Suppression

DROP PROCEDURE [owner.]<nom_proc> ;

LES FONCTIONS
Syntaxe
CREATE [ OR REPLACE ] FUNCTION [<user>].<nom_proc>
(arg1 IN type1 [DEFAULT val_initiale [, arg2 IN type2, ])
RETURN type_retour AS
[ Dclarations des variables locales ]
BEGIN
Contenu du bloc PLS
RETURN (var_retour );
END [<nom_proc>];
/

LES FONCTIONS Exemple


Exemple Compter le nombre d'employs pour un dpartement donn.
CREATE OR REPLACE FUNCTION proc_dept (p_no IN dept.deptno%TYPE)
RETURN NUMBER AS
v_no NUMBER;
BEGIN
SELECT COUNT(no)
INTO v_no
FROM emp
WHERE deptno=no;
RETRUN (v_no);
END;
/

LES FONCTIONS Oprations de base


EXECUTE :var_externe := [owner.]<nom_proc> (liste arguments rels);
SELECT [owner.]<nom_proc> (liste arguments rels FROM DUAL;

Excution
BEGIN
: var_PLS := [owner.]<nom_proc> (liste arguments rels);
END;

Mode SQLPLUS

Suppression

DROP FUNCTION [owner.]<nom_proc> ;

LES PACKAGES
Procdure
Fonction
Exception
Variables, constantes, curseurs
Types de variables.

Package = Encapsulation

SPECIFICATIONS

BODY

Partie publique d'une package


Dclarations des objets
Accs avec le droit EXECUTE

Partie prive d'un package


Dfinition des objets
Peut contenir une partie initialisation des objets.

LES PACKAGES
Procdure P1
Variable P1_V1
Spcifications
"Public"

Procdure P1
Variable P1_V1
Procdure P1
Traitement P1 : Appel F1

Body
"Private"

Curseur P1_C1

Procdure P2
Traitement P2 : Appel F1
Appel P3
Fonction F1
Traitement F1 :
RETURN (F1_VAL)

Curseur P1_C1

Variable P1_V2

LES PACKAGES Cration / Modification


Syntaxe - Spcifications
CREATE [ OR REPLACE ] PACKAGE [<user>].<nom_proc> AS
nom_excep EXCEPTION ;
TYPE type_rec IS RECORD () ;
TYPE type_tab IS TABLE OF ;
nom_var type_var ;
CURSOR nom_cur1 IS SELECT ;
CURSOR nom_cur2(p_no type, ) RETURN [type_retour] ;
TYPE type_cur IS REF CURSOR RETURN [type_retour] ;
FUNCTION <nom_proc> (arg1 IN type1 [DEFAULT val_initiale ]) RETURN type_retour;
PROCEDURE <nom_proc> (arg1 IN type1 [DEFAULT val_initiale [, arg2 OUT type2 [,
arg3 IN OUT type3, ]) ;
END [<nom_package>];
/

LES PACKAGES Cration / Modification


Syntaxe - Body
CREATE [ OR REPLACE ] PACKAGE BODY [<user>].<nom_proc> AS
CURSOR nom_cur2(p_no type, ) RETURN [type_retour]
IS SELECT ;
FUNCTION <nom_proc> (arg1 IN type1 [DEFAULT val_initiale ]) RETURN type_retour
AS
-- variables locales
BEGIN

END;
PROCEDURE <nom_proc> (arg1 IN type1 [DEFAULT val_initiale [, arg2 OUT type2 [,
arg3 IN OUT type3, ]) ;
AS
-- variables locales
BEGIN

END;
END [<nom_package>];

LES PACKAGES Oprations


Recherche d'un package dans la base
SELECT object_name
FROM user_objets
WHERE object_type='PACKAGE'; (resp 'PACKAGE BODY');
Recherche du code source d'un package dans la base

SELECT text
FROM user_source
WHERE name = 'PACKAGE'
= 'PACKAGE BODY'

-- Spcifications du package
-- Corps du package

LES PACKAGES Oprations

Excution
Fonctions
EXECUTE :var_externe :=<nom_package>.<nom_proc> (liste arguments rels);
SELECT <nom_package>.<nom_proc> (liste arguments rels) FROM DUAL;

Procdures
EXECUTE <nom_package>.<nom_proc> (liste arguments rels);

Variables
SELECT <nom_package>.<nom_variable> := <expression> ;

Bloc PLS
:<variable_PLS> := <mon_package>.<nom_fonction>(liste arguments);