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
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;
/
je l'appel comme suit
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;
/
normalement il devrait m'afficher

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