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 ?
Je vous remercie par avance pour vos réponses.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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;
Partager