Bonjour,

J'ai un probleme à l'intérieur du parcours de mon curseur.
quand je fait un select a l'intérieur de celui si avec une clause where qui n'a pas de resultat celui ci s'arrete et ne teste pas les autres valeurs contenue dans le curseur. Comment faire pour qu'il teste les suivants et ne se termine pas quand il ne trouve pas une valeur.

vous trouverez le contenue de mes tables ci dessous ainsi que le code PL/SQL.

Contenu table Lieu_1 :

CODE_1 LIBELLE_1
------ ------------------------------
1 ooo
3 dddd
5 zzz
10 aaa
25 ccc
4 xxxxx
30 zzzz

7 rows selected

Contenu table Lieu_2 :

CODE_2 LIBELLE_2
------ ------------------------------
03 dddd
05 zzz
10 aaa
25 ccc
04 xxxxx
30 zzzz

6 rows selected


Voici le code PL/SQL :

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
 
DROP TABLE tmp_lieu;
/
 
CREATE TABLE tmp_lieu ( 
  code VARCHAR2(2), 
  libelle VARCHAR2(30)
);
/
 
SET SERVEROUTPUT ON
DECLARE
  CURSOR lieuCur IS SELECT code_1 FROM Lieu_1;
  code_lieu VARCHAR2(2);
  libelle_lieu varchar2(20);
BEGIN
  OPEN lieuCur;
  LOOP
    FETCH lieuCur INTO code_lieu;
 
    IF LENGTH(code_lieu) = 1 THEN
      code_lieu := LPAD(code_lieu,2,'0');
    END IF;
 
    DBMS_OUTPUT.PUT_LINE('code : ' || code_lieu);
    libelle_lieu := '';
 
    SELECT libelle_2 INTO libelle_lieu FROM lieu_2 WHERE code_2 = code_lieu;
 
    IF LENGTH(libelle_lieu)>0 THEN
      INSERT INTO tmp_lieu VALUES (code_lieu, libelle_lieu);
    END IF;
 
    EXIT  WHEN lieuCur%NOTFOUND;
  END LOOP;
 
  EXCEPTION 
    WHEN NO_DATA_FOUND THEN DBMS_OUTPUT.PUT_LINE('Aucune donnees');
    WHEN OTHERS THEN DBMS_OUTPUT.PUT_LINE(SQLERRM);
END;
/
 
 SELECT * FROM tmp_lieu;
/
Resultat execution :

DROP TABLE tmp_lieu succeeded.
CREATE TABLE succeeded.
anonymous block completed
code : 01
Aucune donnees

CODE LIBELLE
---- ------------------------------

0 rows selected


Merci d'avance pour votre aide ;-)