Vous êtes sur la page 1sur 14

Les curseurs paramétrés

Il est possible de réutiliser un même curseur avec des valeurs


différentes, dans un même bloc PL/SQL :
DECLARE
CURSOR mon_curseur (param1 TYPE, param2 TYPE, ... )
IS mon_ordre_select ;
-- l’ordre select utilise les paramètres param1, param2...
BEGIN
OPEN mon_curseur (val1, val2,...) ;
...
CLOSE mon_curseur;
END;
Les curseurs paramétrés

Les types des paramètres sont les suivants :


CHAR, NUMBER, DATE, BOOLEAN,

Leur longueur n’est pas spécifiée. Le passage des


valeurs des paramètres s’effectue à l’ouverture du
curseur.
Les curseurs paramétrés

DECLARE
CURSOR c_empp(s1 number,s2 number) IS
SELECT *
FROM emp WHERE salaire between s1 and s2;
BEGIN
FOR eng IN c_empp(10000,21000)
LOOP
DBMS_OUTPUT.PUT_LINE(eng.nom||' '||eng.salaire);
END LOOP;
END;
/
Mettre à jour des données avec un curseur :
CURRENT-OF
la clause CURRENT-OF permet d’accéder directement, en
modification ou en suppression, à la ligne que vient de
renvoyer l’ordre FETCH.
Au préalable, dans la déclaration du curseur, il faut réserver
les lignes qui seront modifiées par la pose d’un verrou
d’intention (...FOR UPDATE OF colonne_à_ modifier...).
DECLARE
CURSOR mon_curseur IS SELECT nom, salaire, commission
FROM emp FOR UPDATE OF sal ;
BEGIN
FOR ma_structure IN mon_curseur
LOOP
IF ma_structure.comm IS NOT NULL THEN
-- si pas de commission, le salaire augmente de 5%
UPDATE emp SET salaire = salaire*1.05
WHERE CURRENT OF mon_curseur;
END IF;
END LOOP;
END;
Gestion des erreurs
Le PL/SQL disposait d’un mécanisme pour traiter les erreurs
et les exceptions rencontrées dans les blocs PL/SQL.
Il existe deux grandes familles d’erreurs :
• celles retournées par Oracle (table inaccessible, conflit de
mise à jour...) ;
• celles dues à l’écriture du programme utilisateur.
Gestion des erreurs
- Syntaxe d’utilisation des exceptions
DECLARE
...
nom_erreur EXCEPTION ;
...
BEGIN
...
IF (problème rencontré) THEN RAISE nom_erreur ;
...
EXCEPTION
WHEN nom_erreur THEN
(traitement de l’erreur);

END;
Gestion des erreurs
Pour les erreurs Oracle prédéfinies, vous n’avez
pas besoin de placer une instruction d’appel à
l’exception dans le code PL/SQL :
DECLARE
...
BEGIN
...
EXCEPTION
WHEN ZERO_DIVIDE THEN (traitement de l’erreur);
WHEN NO_DATA_FOUND THEN (traitement de l’erreur);
...
Gestion des erreurs :Procédure
RAISE_APPLICATION_ERROR

 La procédure RAISE_APPLICATION_ERROR
permet de définir ses propres messages et codes
d’erreurs. Cette procédure évite le renvoi
d’exceptions non traitées car le numéro d’erreur
(inclus dans RAISE_APPLICATION_ERROR) sera
communiqué à l’environnement appelant.
Gestion des erreurs :Procédure
RAISE_APPLICATION_ERROR
RAISE_APPLICATION_ERROR(numéroErreur,
message );
numéroErreur : valeur définie par l'utilisateur pour
l'exception, comprise entre –20 000 et –20 999
message : chaîne de caractères (max 2 048 octets)
décrivant l’erreur.
Les procédures
PROCEDURE ma_procedure (par1, par2, ...parn) IS
-- zone de déclaration : des variables locales, des –
– curseurs , des exceptions
BEGIN
-- traitements
EXCEPTION
-- traitement des exceptions...
END;
Les procédures

Une variable paramètre doit se conformer à la


syntaxe suivante :
nom_parametre [ IN | OUT | IN OUT ]
type_du_paramètre
Le type_du_paramètre doit être NUMBER,
CHAR, BOOLEAN... Ainsi, un type
NUMBER(7,2) n’est pas accepté.
Les fonctions
FUNCTION ma_fonction (par1,par2,...parn)
RETURN type_de_la_variable_retournée IS
-- zone de déclaration : des variables locales
– des curseurs des exceptions
BEGIN
-- traitements
-- clause RETURN
EXCEPTION
-- traitement des exceptions...
-- clause RETURN
END;
Les fonctions
Une variable paramètre doit se conformer à la
syntaxe suivante :
nom_parametre [ IN | OUT | IN OUT ]
type_du_paramètre
Le type_du_paramètre doit être NUMBER,
CHAR, BOOLEAN... Ainsi, un type
NUMBER(7,2) n’est pas accepté.
Pour la clause RETURN, il suffit d’indiquer son
type : NUMBER, CHAR, BOOLEAN, sans lui
donner de nom.

Vous aimerez peut-être aussi