Bonjour,

J'utilise PL/SQL Developer 7.0 sur un Oracle 9i.

Là j'ai une erreur que je ne comprends pas du tout...

J'ai créé cette fonction (allégée exprès pour éviter de poluer le post) :
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
50
51
52
53
54
55
56
57
58
59
60
61
62
63
create or replace function FC_MAP_APP015B_DATA(p_entrepot    in number,
                                               p_fournisseur in varchar2,
                                               p_code_appro  in varchar2,
                                               p_racine      in varchar2,
                                               p_vl          in varchar2,
                                               p_magasin     in varchar2,
                                               p_user        in varchar2,
                                               p_date_deb    in varchar2,
                                               p_date_fin    in varchar2) return number is
  pragma autonomous_transaction;
 
  -- Code retour :
  --    0  : OK
  -- ...
 
  -- Constantes
  c_longueur_libelle_attribut constant number := 4;
  c_longueur_libelle_magasin  constant number := 5;
  c_debug                     constant number := 0;  -- 1 : Afficher le debug dans dbms_output, ne rien afficher sinon
                                                     --     Placer cette variable à 1 uniquement en mode debug !
  c_oui                       constant varchar2(3) := 'Oui';
  c_non                       constant varchar2(3) := 'Non';
  c_coche                     constant varchar2(1) := 'X';
  c_decoche                   constant varchar2(1) := '';
 
  -- Types
  type    t_cur     is ref cursor;
  subtype t_oui_non is varchar2(3);
  subtype t_coche   is varchar2(1);
 
  -- Variables
  v_curseur     t_cur;
  v_requete     varchar2(4096);
  v_code_retour number(3) := 0;
 
  procedure MAP_APP015B_DEBUG(p_debug_str in varchar2) is
    v_debug_pos number(5) := 1;
    v_debug_pas number(5) := 120;
    v_debug_len number(5);
  begin
    if c_debug = 1 then
      v_debug_len := length(p_debug_str);
      dbms_output.put_line('MAP_APP015B_DATA: ' || substr(p_debug_str, v_debug_pos, v_debug_pas));
      v_debug_pos := v_debug_pos + v_debug_pas;
      while v_debug_pos <= v_debug_len loop
        dbms_output.put_line('MAP_APP015B_DATA:... ' || substr(p_debug_str, v_debug_pos, v_debug_pas));
        v_debug_pos := v_debug_pos + v_debug_pas;
      end loop;
    end if;
  end MAP_APP015B_DEBUG;
 
begin
  MAP_APP015B_DEBUG('debut');
 
  -- Plein de choses ici normalement
 
  MAP_APP015B_DEBUG('fin (code retour ' || v_code_retour || ')');
 
  commit;
 
  return v_code_retour;
end FC_MAP_APP015B_DATA;
/
Done in 0,015 seconds
Ensuite, j'essaie d'appeler la fonction et j'ai l'erreur suivante :
ORA-06575: Package or function FC_MAP_APP015B_DATA is in invalid state
Ok, je regarde dans la liste des fonctions et ma fonction est bien marquée invalide. Clique droit > View. Et surprise, voilà ce que ça me donne :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
create or replace function FC_MAP_APP015B_DATA(p_entrepot    in number,
                                               p_fournisseur in varchar2,
                                               p_code_appro  in varchar2,
                                               p_racine      in varchar2,
                                               p_vl          in varchar2,
                                               p_magasin     in varchar2,
                                               p_user        in varchar2,
                                               p_date_deb    in varchar2,
                                               p_date_fin    in varchar2) return number is
  pragma autonomous_transaction;
Compilation errors for FUNCTION MAPPING.FC_MAP_APP015B_DATA

Error: PLS-00103: Encountered the symbol "end-of-file" when expecting one of the following:

begin function package pragma procedure subtype type use
<an identifier> <a double-quoted delimited-identifier> form
current cursor
Line: 11
Pourquoi il m'a zappé la fin de ma fonction ?
Cette fonction avait été compilée et testée avant mon départ en congés sans problème...

Pour résumer, pas d'erreur à la compilation (ni même de warning) mais la fonction est invalide et non utilisable. Des idées/pistes ?

Merci par avance.