Salut

J'ai la fonction 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
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
 
(c1
    sys_refcursor)
                                     return afm_flds.enum_list%type is
  newEnumlistItem varchar(255);
  newEnumlist afm_flds.enum_list%type := null;
  newEnumlistItemDesc varchar(255) := null;
 
  newEnumlistTmp afm_flds.enum_list%type := null;
  smlstr                        varchar2(128);
  valstr                       varchar2(128);
  idxval                        number;
 
  begin
 
  loop
    FETCH c1 into newEnumlist;
      exit when c1%notfound;
  end loop;
 
  loop
    idxval:= instr( newEnumlist, ';' );
    if idxval = 0 then
      smlstr:= newEnumlist;
    else
      smlstr:= substr( newEnumlist, 1, idxval - 1 );
      newEnumlist:= substr( newEnumlist, idxval + 1 );
    end if;
    exit when idxval = 0 or idxval IS NULL;
    idxval:= instr( newEnumlist, ';' );
     if idxval = 0 then
      valstr:= newEnumlist;
    else
      valstr:= substr( newEnumlist, 1, idxval - 1 );
      newEnumlist:= substr( newEnumlist, idxval + 1 );
    end if;
 
    newEnumlistTmp := newEnumlistTmp||''''||valstr||''','''||smlstr||''',';       
    exit when idxval = 0 or idxval IS NULL;
  end loop;
 
  close c1;
 
  newEnumlistTmp := substr(newEnumlistTmp, 1, length(newEnumlistTmp)-1);
 
 
  return newEnumlistTmp;
 
  end;
Cette fonction est appelée dans cette procédure :

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
 
PROCEDURE FI_CHECK_AFM_FLDS_EXIST(pNumberAfter OUT INTEGER, pError OUT VARCHAR2) IS
-- afm_flds values are corrects?
 
sInList afm_flds.enum_list%type := '';
 
BEGIN
   pNumberAfter := 0;
      pError := 'OK';
 
   --honorific
   select ReverseList(cursor(select enum_list from afm_flds where table_name = 'em' and field_name = 'honorific')) into sInList from dual;
 
   update temp_sap_em set honorific = decode(honorific, sInList, 'toto');
 
 
EXCEPTION
        WHEN OTHERS THEN ROLLBACK;
        pNumberAfter := 0;
        pError:=SQLERRM;
END FI_CHECK_AFM_FLDS_EXIST;
Le résultat est toujours le même, à savoir un update du champs à 'null'.

Le décode n'est pas pris en charge.

Pourtant, si j'affiche la query, tout est correct.

Une idée sur ce qui coince ???

Merci.