Bonjour
j'ai une table HD_MAT comme suit
CDMAT CDMATR
1 10
2 10
3 10
4 10
10 20
11 20
12 20
13 20
J'ai la fonction recusive suivante
je l'appel comme suit
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 CREATE OR REPLACE FUNCTION TEST(p_cdmatr IN VARCHAR2) return number IS TYPE TABLE_CDMAT IS TABLE OF VARCHAR2(20) INDEX BY BINARY_INTEGER; var_tab_cdmat TABLE_CDMAT; retour number; BEGIN SELECT CDMAT BULK COLLECT INTO var_tab_cdmat FROM HD_MAT WHERE CDMATR=p_cdmatr; IF var_tab_cdmat.COUNT>0 THEN FOR iCnt IN var_tab_cdmat.FIRST..var_tab_cdmat.LAST LOOP dbms_output.put_line('LIGNE '||var_tab_cdmat(iCnt)); retour :=TEST(var_tab_cdmat(iCnt)); END LOOP; END IF; return 1; END; /
normalement il devrait m'afficher
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 declare retour number; begin retour:=test('20'); dbms_output.put_line('FIN'); end; /
10
1
2
3
4
11
12
13
mais il affiche
10
10
10
10
10
10
10
10
10
...
...
à l'infini
quelqu'un peut m'aider
cordialement
Partager