Upload
iria
View
91
Download
3
Embed Size (px)
DESCRIPTION
Oracle - PL / SQL (Procedural Language / Structured Query Language). Problématique posée par SQL. SQL est un langage non procédural, répondant à la question QUOI ? Mais pas au COMMENT ?. Les développeurs ont besoin d’assembler des données et de les traiter ligne par ligne. - PowerPoint PPT Presentation
Citation preview
Oracle - PL / SQL
(Procedural Language / Structured Query Language)
Oracle - PL / SQL
(Procedural Language / Structured Query Language)
Problématique posée par SQLProblématique posée par SQL
Mise en place d’un langage de traitement procédural qui facilite la tâche des développeurs et qui permet de pallier aux carences du langage SQL : PL/SQL.
Mise en place d’un langage de traitement procédural qui facilite la tâche des développeurs et qui permet de pallier aux carences du langage SQL : PL/SQL.
Les développeurs ont besoin d’assembler des données et de les traiter ligne par ligne.
Les développeurs ont besoin d’assembler des données et de les traiter ligne par ligne.
Solution apportée par Oracle à partir de la version 6
Solution apportée par Oracle à partir de la version 6
SQL est un langage non procédural, répondant à la question QUOI ? Mais pas au COMMENT ?
SQL est un langage non procédural, répondant à la question QUOI ? Mais pas au COMMENT ?
Présentation du langage PL/SQL
Présentation du langage PL/SQL
DD
NoyauNoyau
DICTIONNAIREDONNEES
SQL
DEVELOPPER
DESIGNER
Oracle APPLICATION (PGI)PL/SQL
Présentation du langage PL/SQL
Présentation du langage PL/SQL
PL/SQLPL/SQL
SQL STATEMENT EXECUTORIntégré au noyau RDBMS.SQL STATEMENT EXECUTORIntégré au noyau RDBMS.
PROCEDURAL STATEMENT EXECUTORIntégré au noyau et aux outils (Forms, Rports, OAS, …)
PROCEDURAL STATEMENT EXECUTORIntégré au noyau et aux outils (Forms, Rports, OAS, …)
Déclarations possibles des variables.
Intégration de la majorité des ordres SQL..
Traitements séquentiels.
Exécution conditionnelle de blocs d’instructions.
Traitements répétitifs (boucles).
Gestion des exceptions.
Déclarations possibles des variables.
Intégration de la majorité des ordres SQL..
Traitements séquentiels.
Exécution conditionnelle de blocs d’instructions.
Traitements répétitifs (boucles).
Gestion des exceptions.
REGLESREGLES
SQL & PL/SQLSQL & PL/SQL
LIDLID TRANSACTION
TRANSACTION
LMDLMD FONCTIONSFONCTIONS
SELECTSELECTINSERTUPDATEDELETE
LOCK TABLE
INSERTUPDATEDELETE
LOCK TABLE
COMMITROLLBACKSAVEPOINT
SET TRANSACTION
COMMITROLLBACKSAVEPOINT
SET TRANSACTION
SUMDECODE
MODUPPER
SYSDATETO_CHAR …
SUMDECODE
MODUPPER
SYSDATETO_CHAR …
Inté
gr
és
Non
in
tég
rés
EXPLAIN PLANEXPLAIN PLANCREATEALTERDRPO
CREATEALTERDRPO
GRANTREVOKEGRANT
REVOKE ALTER SESSIONSET ROLE
ALTER SYSTEM
ALTER SESSIONSET ROLE
ALTER SYSTEM
STRUCRURE D’UN BLOC
PL/SQL
STRUCRURE D’UN BLOC
PL/SQL
BLOC PL/SQLBLOC PL/SQL
Partie déclarative
(optionnelle)
Partie déclarative
(optionnelle)
Partie exception
(optionnelle)
Partie exception
(optionnelle)
Partie exécutable (obligatoire)
Partie exécutable (obligatoire)
• Chaque instruction se termine par un point virgule.
• Les commentaires sont possibles /* */.
• Possibilité d’imbrication des blocs.
• Chaque instruction se termine par un point virgule.
• Les commentaires sont possibles /* */.
• Possibilité d’imbrication des blocs.
DECLAREDECLARE EXCEPTIONEXCEPTIONBEGIN … ENDBEGIN … END
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
LES VARIABLES & LES TYPES
Les variables locales : Elles ne sont pas visibles dans tous les blocs. Elles peuvent être simples ou structurées.
Les variables globales : elles sont déclarées dans la partie commune à tous les blocs. Elles peuvent être simples ou structurées.
Les variables externes (bind variables) : elles sont externes à tous les blocs. (variables sql+, variables pro*, champs dans les forms).
RemarqueLes variables externes sont précédées de :.
LES VARIABLES & LES TYPES
Les variables locales : Elles ne sont pas visibles dans tous les blocs. Elles peuvent être simples ou structurées.
Les variables globales : elles sont déclarées dans la partie commune à tous les blocs. Elles peuvent être simples ou structurées.
Les variables externes (bind variables) : elles sont externes à tous les blocs. (variables sql+, variables pro*, champs dans les forms).
RemarqueLes variables externes sont précédées de :.
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
Type Syntaxe Remarques / Exemple
NUMBER NUMBER [(total [ , Décimal])] Total est max égal à 38.Salaire NUMBER(7,2)
CHAR CHAR [(longueur)] Nom CHAR(15)
VARCHAR2 VARCHAR2 [(longueur)] Le type chaîne le plus efficace sous Oracle
DATE DATE Date_Naiss DATE
RAW RAW (longueur) Géré comme le VARCHAR2, mais pas affichable.Seq RAW(100)
LONG LONG Permet de stocker des chaînes d'une longueur max de 2 Go.Texte LONG
LONG RAW LONG RAW Stockage de fichiers binaires comme les images, son et de la vidéo.Longueur max est 2GoPhoto LONG RAW
Types classiques
Types classiques
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
Types propres à PL/SQL
Types propres à PL/SQL
Type Syntaxe Remarques / Exemple
BINARY_INTEGER
BINARY_INTEGER -2E31-1 à +2E31-1 -2.147.483.647 à + 2.147.483.647
PLS_INTEGER PLS_INTEGER -2.147.483.647 à + 2.147.483.647
BOOLEAN BOOLEAN Les valeurs : TRUE, FALSE, NULL
RemarquesLes types BINARY_INTEGER et PLS_INTEGER requièrent moins d’espaces que les types NUMBER.
RemarquesLes types BINARY_INTEGER et PLS_INTEGER requièrent moins d’espaces que les types NUMBER.
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
Conversion de types Conversion implicite : effectuée par PL/SQL Conversion explicites par les fonctions.
Conversion de types Conversion implicite : effectuée par PL/SQL Conversion explicites par les fonctions.
BINARY_ INTEGER
CHAR VARCHAR2
LONG NUMBER
PLS_INTEGER
DATE RAW ROWID
BINARY_ INTEGER
OUI OUI OUI OUI OUI
CHAR OUI OUI OUI OUI OUI OUI OUI OUI
VARCHAR2 OUI OUI OUI OUI OUI OUI OUI OUI
LONG OUI OUI
NUMBER OUI OUI OUI OUI
PLS_INTEGER OUI OUI OUI OUI OUI
DATE OUI OUI OUI
RAW OUI OUI OUI
ROWID OUI OUIConversion explicites : TO_CHAR, TO_NUMBER, TO_DATE, TO_LOB, CHARTOROWID TO_SINGLE_BYTE, …
Conversion explicites : TO_CHAR, TO_NUMBER, TO_DATE, TO_LOB, CHARTOROWID TO_SINGLE_BYTE, …
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
Déclaration de variables
Déclaration de variables
InitialisationInitialisation
Dans la partie DECLAREDans la partie DECLARE
Syntaxe1 : <nom_var> <type> <initialisation> ;Syntaxe1 : <nom_var> <type> <initialisation> ;
Avec opérateur d’affectation :=Avec opérateur d’affectation :=
Par le mot clé DEFAULT (à la place de :=)Par le mot clé DEFAULT (à la place de :=)
Par la clause INTO de l’ordre SELECT Par la clause INTO de l’ordre SELECT
Par le biais d’un curseurPar le biais d’un curseur
Syntaxe2 : <nom_var> <nom_var_ref>%TYPE <init> ;Syntaxe2 : <nom_var> <nom_var_ref>%TYPE <init> ;
Syntaxe2 : <nom_var> <nom_table.nom_var_ref>%TYPE <init> ;
Syntaxe2 : <nom_var> <nom_table.nom_var_ref>%TYPE <init> ;
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
Exemples de déclarationsExemples de déclarations-- Exemple 1DECLARE
num_emp NUMBER(10);date_jour DATE :=SYSDATE; -- Initialisée à la date du jourlogique BOOLEAN;trouve logique%TYPE DEFAULT FALSE;n NUMBER :=-5;carre NUMBER :=n**2;
-- Exemple 2DECLARE
nom_emp VARCHAR2(35) NOT NULL :="BENOIT’";chaine VARCHAR2(25) DEFAULT 6; -- Conversion implicitenombre NUMBER(3) :=‘5’; -- Conversion implicitepi CONSTANT NUMBER :=3.14; -- Déclaration d'une constante
-- Exemple 3 DECLARE
sal employe.salaire%TYPE :=0; -- Même type que la colonne salaire de la table employe.
Remarque La contrainte NOT NULL d’une colonne ne s’applique sur la variable.
-- Exemple 1DECLARE
num_emp NUMBER(10);date_jour DATE :=SYSDATE; -- Initialisée à la date du jourlogique BOOLEAN;trouve logique%TYPE DEFAULT FALSE;n NUMBER :=-5;carre NUMBER :=n**2;
-- Exemple 2DECLARE
nom_emp VARCHAR2(35) NOT NULL :="BENOIT’";chaine VARCHAR2(25) DEFAULT 6; -- Conversion implicitenombre NUMBER(3) :=‘5’; -- Conversion implicitepi CONSTANT NUMBER :=3.14; -- Déclaration d'une constante
-- Exemple 3 DECLARE
sal employe.salaire%TYPE :=0; -- Même type que la colonne salaire de la table employe.
Remarque La contrainte NOT NULL d’une colonne ne s’applique sur la variable.
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
Les variables référencées à une table de la base Les variables référencées à une table de la base
Elles sont liées à des tables au niveau de la base. On les déclare par l’attribut : %ROWTYPE
Exemples DECLARE
agent employe%ROWTYPE -- employe est la table employe de la base.
Au niveau traitement, on pourra écrire :
BEGINSELECT * -- Sélection de tous les champsINTO agentFROM employeWHERE nom=‘DUMAS’;
END;Ou
BEGINSELECT nom,dt_entree -- Sélection de certains champsINTO agent.nom, agent.dt_entreeFROM employeWHERE nom=‘DUMAS';
END;
Elles sont liées à des tables au niveau de la base. On les déclare par l’attribut : %ROWTYPE
Exemples DECLARE
agent employe%ROWTYPE -- employe est la table employe de la base.
Au niveau traitement, on pourra écrire :
BEGINSELECT * -- Sélection de tous les champsINTO agentFROM employeWHERE nom=‘DUMAS’;
END;Ou
BEGINSELECT nom,dt_entree -- Sélection de certains champsINTO agent.nom, agent.dt_entreeFROM employeWHERE nom=‘DUMAS';
END;
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
LES TYPES STRUCTURES -
RECORD
LES TYPES STRUCTURES -
RECORD
Syntaxe de déclaration du typeTYPE <nom_type_record> IS RECORD (
<membre1 > <type1>,
<membre2 > <type2>,… <membren > <typen>
);
Syntaxe de déclaration du typeTYPE <nom_type_record> IS RECORD (
<membre1 > <type1>,
<membre2 > <type2>,… <membren > <typen>
);
Utilisation<nom_variable>.<membre> := <expression>;
Utilisation<nom_variable>.<membre> := <expression>;
Déclaration des variables de type record
<nom_type_record> <nom_variable>, … ;
Déclaration des variables de type record
<nom_type_record> <nom_variable>, … ;
ExempleDECLARETYPE emp_type_rec IS RECORD (num employe.empno%TYPE,service e_service.nom%TYPE,salaire NUMBER(11,2),date_jour DATE :=SYSDATE);
var_emp1 emp_type_rec;var_emp2 emp_type_rec;
v_emp1.num:=2550;v_emp1.nom:='LAROUSSI'v_emp2:=v_emp1;
ExempleDECLARETYPE emp_type_rec IS RECORD (num employe.empno%TYPE,service e_service.nom%TYPE,salaire NUMBER(11,2),date_jour DATE :=SYSDATE);
var_emp1 emp_type_rec;var_emp2 emp_type_rec;
v_emp1.num:=2550;v_emp1.nom:='LAROUSSI'v_emp2:=v_emp1;
1
2
34
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
LES TYPES STRUCTURES -
TABLEAUX
LES TYPES STRUCTURES -
TABLEAUX
Syntaxe de déclaration du type
TYPE <nom_type_tableau> IS TABLE OF <type_simple>| <type_record>|<Colonne_Table> …INDEX BY BINARY_INTEGER ;
Syntaxe de déclaration du type
TYPE <nom_type_tableau> IS TABLE OF <type_simple>| <type_record>|<Colonne_Table> …INDEX BY BINARY_INTEGER ;
Accès aux données
<var_tableau>(<indice>) := <expression> ;
Accès aux données
<var_tableau>(<indice>) := <expression> ;
Déclaration des variables de type tableau
<nom_type_tableau> <var_tableau> ;
Déclaration des variables de type tableau
<nom_type_tableau> <var_tableau> ;
Remarques
- La valeur de l'indice varie de : -2.147.483.647 à + 2.147.483.647.
- Les lignes intermédiaires existent potentiellement mais n'occupent aucun espace.
Remarques
- La valeur de l'indice varie de : -2.147.483.647 à + 2.147.483.647.
- Les lignes intermédiaires existent potentiellement mais n'occupent aucun espace.
1
2
3
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
LES TYPES STRUCTURES - TABLEAUXLES TYPES STRUCTURES - TABLEAUX
Exemple
DECLARE TYPE t_tab_salaire TABLE OF
NUMBER(11,3);tab1 t_tab_salaire;
BEGINtab1(-100) := 2500;tab1(-50) := 1500;tab1(15) :=2000;
END;
Exemple
DECLARE TYPE t_tab_salaire TABLE OF
NUMBER(11,3);tab1 t_tab_salaire;
BEGINtab1(-100) := 2500;tab1(-50) := 1500;tab1(15) :=2000;
END;
PARTIE DECLARATIVE BLOC PL/SQL
PARTIE DECLARATIVE BLOC PL/SQL
TABLEAUX – Primitives de manipulation des indices -TABLEAUX – Primitives de manipulation des indices -
Primitives Rôle
EXISTS(n) Retourne TRUE si l'élément d'indice n existe.
COUNT Retourne le nombre d'éléments du tableau.
FIRST & LAST
La plus petite et la plus grande valeur de l'indice du tableau.
PRIOR(n) Valeur de l'indice qui précède n.
NEXT(n) Valeur de l'indice qui suit n.
DELETE Supprime tous les éléments du tableau.
DELETE(n) Supprime le nième élément du tableau.
DELETE(m,n)
Supprime les éléments de m à n.
PARTIE EXECUTABLEPARTIE EXECUTABLE
Type Rôle
ARITHMETIQUES
+ , - , * , ** , /
RELATIONNELS <> , != , < , > , = , IS NOT NULL , IN , LIKE , AND , OR , BETWEEN , …
AUTRES OPERATEURS
( ) , ; , , , . , := , || , /* .. */ ,
OpérateursOpérateurs
Remarques
- Un système de priorité est respecté pour l'évaluation des expressions ( ) , ** , * / , + - .
Remarques
- Un système de priorité est respecté pour l'évaluation des expressions ( ) , ** , * / , + - .
PARTIE EXECUTABLEPARTIE EXECUTABLE
STRUCTURES DE CONTROLESTRUCTURES
DE CONTROLE
STRUCTURES CONDITIONNELLES
STRUCTURES CONDITIONNELLES
STRUCTURES REPETITIVESSTRUCTURES REPETITIVES
IF… THEN … END IFIF… THEN … END IF
IF … THEN … ELSE … END IF
IF … THEN … ELSE … END IF
IF … THEN … ELSIF … ELSE … END IF
IF … THEN … ELSIF … ELSE … END IF
LOOP … END LOOPLOOP … END LOOP
WHILE … LOOP … END LOOP
WHILE … LOOP … END LOOP
FOR … LOOP … END LOOPFOR … LOOP … END LOOP
PARTIE EXECUTABLEPARTIE EXECUTABLE
IF <condition1> THEN-- Séquence1 instructions;
ELSIF <condition2> THEN-- Séquence2 Instructions;
ELSIF <condition3> THEN-- Séquence3 Instructions;
…ELSIF <conditionN> THEN
-- SéquenceN Instructions;
ELSE-- Séquence_else
Instructions;
END IF;
IF <condition1> THEN-- Séquence1 instructions;
ELSIF <condition2> THEN-- Séquence2 Instructions;
ELSIF <condition3> THEN-- Séquence3 Instructions;
…ELSIF <conditionN> THEN
-- SéquenceN Instructions;
ELSE-- Séquence_else
Instructions;
END IF;
IF <condition> THEN -- Séquence1 instructions;
ELSE -- Séquence2 instructions;
END IF;
IF <condition> THEN -- Séquence1 instructions;
ELSE -- Séquence2 instructions;
END IF;
IF <condition> THEN -- Séquence1
instructions;END IF;
IF <condition> THEN -- Séquence1
instructions;END IF;
STRUCTURES CONDITIONNELLES
STRUCTURES CONDITIONNELLES
PARTIE EXECUTABLEPARTIE EXECUTABLE
FOR <compteur> IN [REVERSE] b_inf..b_supLOOP… ;END LOOP;
- Compteur est déclarée implicitement.- Interdiction de modification de compteur dans la boucle.- La notion de pas n'existe pas (pas=1 ou -1).
FOR <compteur> IN [REVERSE] b_inf..b_supLOOP… ;END LOOP;
- Compteur est déclarée implicitement.- Interdiction de modification de compteur dans la boucle.- La notion de pas n'existe pas (pas=1 ou -1).
WHILE <condition>LOOP… ;END LOOP ;
WHILE <condition>LOOP… ;END LOOP ;
[<label<]LOOP… ;EXIT [label] [ WHEN <condition>] ;…END LOOP [label] ;
[<label<]LOOP… ;EXIT [label] [ WHEN <condition>] ;…END LOOP [label] ;
STRUCTURES REPETITIVES
STRUCTURES REPETITIVES
PARTIE EXECUTABLEPARTIE EXECUTABLE
LES CURSEURSLES CURSEURS
Une zone mémoire de taille fixe contenant le résultat d'une requête.
Utilisée pour interpréter et analyser les ordres SQL.
Le nombre de curseurs ouverts simultanément est défini par le paramètre OPEN_CURSORS . dans le PFILE de la base.
Une zone mémoire de taille fixe contenant le résultat d'une requête.
Utilisée pour interpréter et analyser les ordres SQL.
Le nombre de curseurs ouverts simultanément est défini par le paramètre OPEN_CURSORS . dans le PFILE de la base.
CURSEURSCURSEURS
IMPLICITES
générés et gérés par le noyau Oracle pour
chaque ordre SQL
IMPLICITES
générés et gérés par le noyau Oracle pour
chaque ordre SQL
EXPLICITES
Déclaré par l'user dans la
section DECLARE d'un
bloc PLS
EXPLICITES
Déclaré par l'user dans la
section DECLARE d'un
bloc PLS
LES CURSEURS EXPLICITES
LES CURSEURS EXPLICITES
Étapes de création d'un CURSEUR
explicite
Étapes de création d'un CURSEUR
expliciteDECLARATION DU
CURSEUR
CURSOR … IS
DECLARATION DU CURSEUR
CURSOR … IS
OUVERTURE DU CURSEUR
OPEN
OUVERTURE DU CURSEUR
OPEN
ACCES AU CURSEUR
FETCH … INTO
ACCES AU CURSEUR
FETCH … INTO
FERMETURE DU CURSEUR
CLOSE
FERMETURE DU CURSEUR
CLOSE
DECLARATION DU CURSEUR
CURSOR … IS
DECLARATION DU CURSEUR
CURSOR … IS
LES CURSEURS EXPLICITES
LES CURSEURS EXPLICITES
Syntaxe
DECLARE
CURSOR <nom_curseur> ISSELECT col1, col2, col3, …FROM tab1, tab2, tab3, …WHERE <condition>;
… ;
Syntaxe
DECLARE
CURSOR <nom_curseur> ISSELECT col1, col2, col3, …FROM tab1, tab2, tab3, …WHERE <condition>;
… ;
Exemple
DECLARE
CURSOR c_employe ISSELECT empno, ename, salaireFROM employeWHERE salaire BETWEEN 1000 AND 2500 ;
Exemple
DECLARE
CURSOR c_employe ISSELECT empno, ename, salaireFROM employeWHERE salaire BETWEEN 1000 AND 2500 ;
OUVERTURE D'UN CURSEUR
OPEN …
OUVERTURE D'UN CURSEUR
OPEN …
LES CURSEURS EXPLICITES
LES CURSEURS EXPLICITES
Syntaxe
BEGIN… ;OPEN <nom_curseur>;… ;END;
Syntaxe
BEGIN… ;OPEN <nom_curseur>;… ;END;
ExempleDECLARE
CURSOR c_employe ISSELECT empno, ename, salaireFROM employeWHERE salaire BETWEEN 1000 AND 2500 ;
BEGINOPEN c_employe;… ;
END;
ExempleDECLARE
CURSOR c_employe ISSELECT empno, ename, salaireFROM employeWHERE salaire BETWEEN 1000 AND 2500 ;
BEGINOPEN c_employe;… ;
END;
TRAITEMENT DES LIGNES DU CURSEUR
FETCH … INTO
TRAITEMENT DES LIGNES DU CURSEUR
FETCH … INTO
LES CURSEURS EXPLICITES
LES CURSEURS EXPLICITES
Syntaxe
BEGIN… ;FETCH <nom_cur> INTO {<liste_var> |<var_record>};… ;END;
Syntaxe
BEGIN… ;FETCH <nom_cur> INTO {<liste_var> |<var_record>};… ;END;
ExempleDECLARE
no employe.empno%TYPE; -- Variables programmes
name employe.ename%TYPE;CURSOR c_employe IS -- CurseurSELECT empno, enameFROM employeWHERE salaire BETWEEN 1000 AND 2500 ;
BEGIN
OPEN c_employe;FETCH c_employe INTO no,ename; -- Accès aux
lignes du cruseurDBMS_OUTPUT.PUT_LINE(no,ename) ;
END;
ExempleDECLARE
no employe.empno%TYPE; -- Variables programmes
name employe.ename%TYPE;CURSOR c_employe IS -- CurseurSELECT empno, enameFROM employeWHERE salaire BETWEEN 1000 AND 2500 ;
BEGIN
OPEN c_employe;FETCH c_employe INTO no,ename; -- Accès aux
lignes du cruseurDBMS_OUTPUT.PUT_LINE(no,ename) ;
END;
FERMETURE D'UN CURSEUR
CLOSE …
FERMETURE D'UN CURSEUR
CLOSE …
LES CURSEURS EXPLICITES
LES CURSEURS EXPLICITES
Syntaxe
BEGIN… ;CLOSE <nom_curseur>;… ;END;
Syntaxe
BEGIN… ;CLOSE <nom_curseur>;… ;END;
ExempleDECLARE
CURSOR c_employe ISSELECT empno, ename, salaireFROM employeWHERE salaire BETWEEN 1000 AND 2500 ;
BEGINOPEN c_employe;… ;CLOSE c_employe;
END;
ExempleDECLARE
CURSOR c_employe ISSELECT empno, ename, salaireFROM employeWHERE salaire BETWEEN 1000 AND 2500 ;
BEGINOPEN c_employe;… ;CLOSE c_employe;
END;
ATTRIBUTS DES CURSEURS
ATTRIBUTS DES CURSEURS
LES CURSEURS EXPLICITES
LES CURSEURS EXPLICITES
Attribut Type Syntaxe Rôle
%NOTFOUND
Booléen
{<nom_cursor>}%ATTRIBUT
Retourne TRUE si la dernière commande FETCH n'a pas ramené de lignes.
%FOUND Booléen Retourne TRUE si la dernière commande FETCH a ramené une ligne.
%ROWCOUNT
Numérique
Retourne le nombre de lignes ramenées par la commande FETCH.
%ISOPEN Booléen Retourne TRUE si le curseur est ouvert et FALSE sinon.
LES CURSEURS EXPLICITES
LES CURSEURS EXPLICITES
Parcours des lignes d'un curseurParcours des lignes d'un curseur
En passant par la boucle
LOOP … END LOOP
BEGINLOOP
FETCH … ;INTO … ;IF <curseur>%FOUND THEN…
ELSEEXIT ;
END IFEND LOOP;
En passant par la boucle
LOOP … END LOOP
BEGINLOOP
FETCH … ;INTO … ;IF <curseur>%FOUND THEN…
ELSEEXIT ;
END IFEND LOOP;
En utilisant la boucle
FOR enreg IN <nom_curseur>LOOP
…
END LOOP;
En utilisant la boucle
FOR enreg IN <nom_curseur>LOOP
…
END LOOP;
Exemple
FOR enreg IN c_employeLOOP
…
END LOOP;
Exemple
FOR enreg IN c_employeLOOP
…
END LOOP;
LES CURSEURS PARAMETRESLES CURSEURS PARAMETRES
Il est possible de paramétrer un curseur pour une utilisation commune à plusieurs traitements.
Syntaxe déclaration
DECLARECURSOR <nom_curseur> (p1 type_p1 [,p2 type_p2 [, …]) ISSELECT …FROM …WHERE <condition qui utilisent les paramètres>
…;
Utilisation du curseur paramétrerBEGIN
OPEN <nom_cur>(val1,[,val2 [,…]);FETCH <nom_cur>INTO …;CLOSE <nom_cur>;
END;
Il est possible de paramétrer un curseur pour une utilisation commune à plusieurs traitements.
Syntaxe déclaration
DECLARECURSOR <nom_curseur> (p1 type_p1 [,p2 type_p2 [, …]) ISSELECT …FROM …WHERE <condition qui utilisent les paramètres>
…;
Utilisation du curseur paramétrerBEGIN
OPEN <nom_cur>(val1,[,val2 [,…]);FETCH <nom_cur>INTO …;CLOSE <nom_cur>;
END;