EXCEPTION sur l'ouverture d'un curseur
Bonjour, :)
Dans une procédure je crée un curseur qui retourne une ou plusieurs lignes. Si mon 1er param a été renseigné, je parcours mon curseur.
L'exception no_data_found ne fonctionne pas si mon curseur ne retourne aucune ligne.
Je constate qu'en retappant l'instruction sql de mon curseur (select nom into v_nom from Pilote where comp=pcomp and nom like '%'||pnom||'%')
avant son ouverture résoud mon problème.
Ma question : Comment puis-je tester que le curseur ne renvoie aucun résultat sans inclure auparavant la requête précédemment citée ?
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27
|
CREATE OR REPLACE PROCEDURE AJOUTER(pcomp in varchar2, pnom in varchar2)
as
-- Déclaration du curseur en cas de màj de +sieurs lignes
cursor c_update is
select * from Pilote where comp=pcomp and nom like '%'||pnom||'%';
ligne c_update%ROWTYPE;
begin
if (pcomp is null) then
dbms_output.put_line('Veuillez renseigner la compagnie');
else
open c_update; -- ouverture du curseur
LOOP
fetch c_update into ligne; -- Traitement de chaque ligne du curseur
exit when c_update%NOTFOUND; -- on sort lorsque la dernière ligne a été atteinte
dbms_output.put_line(ligne.nom || ' = ' || ligne.nbhvol);
update Pilote set nbhvol=ligne.nbhvol+1 where comp=ligne.comp and nom=ligne.nom; -- Màj de la ligne correspondante
END LOOP;
close c_update; -- fermeture du curseur
end if;
EXCEPTION -- Définition des exceptions rencontrées
when NO_DATA_FOUND then
dbms_output.put_line('Aucune correspondance trouvée');
when others then
dbms_output.put_line('ERREUR AUTRE....');
end AJOUTER; |
Je vous remercie par avance pour vos réponses.