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 :
Resultat execution :
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; /
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 ;-)
Partager