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 : 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;
Je vous remercie par avance pour vos réponses.