Académique Documents
Professionnel Documents
Culture Documents
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