IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

SQL Oracle Discussion :

[9i] Problème avec une fonction


Sujet :

SQL Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut [9i] Problème avec une fonction
    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.

  2. #2
    Membre Expert

    Homme Profil pro
    Chef de projet en SSII
    Inscrit en
    Janvier 2004
    Messages
    2 862
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Chef de projet en SSII
    Secteur : Conseil

    Informations forums :
    Inscription : Janvier 2004
    Messages : 2 862
    Par défaut
    Il te manque pas un begin par hasard ?

  3. #3
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut
    C'est pas faux, j'ai peut-être un peu trop élagué...

    Je mets à jour le post initial.

    Le problème reste inchangé par contre.

    Edit : J'ai essayé de taper n'importe quoi dans le corps de la fonction et je n'ai aucune erreur de compilation
    Y aurait-il une option dans Oracle 9i qui permette de ne pas vérifier les erreurs de syntaxe et de validité de fonctions et packages utilisés lors de la création d'une fonction/package ?

  4. #4
    McM
    McM est déconnecté
    Expert confirmé

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Billets dans le blog
    4
    Par défaut
    Désolé, mais il faut donner le code complet car là ça devrait marcher.

  5. #5
    Membre expérimenté Avatar de Loyd1974
    Profil pro
    Inscrit en
    Août 2007
    Messages
    176
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2007
    Messages : 176
    Par défaut
    Est-ce que pour créer ta fonction tu es passé par le menu Fichier -> Nouveau -> Fenêtre Programme -> Function ou bien par une fenêtre SQL ou une fenêtre de commande ?

    J'ai des problèmes avec la première solution qui ne marche jamais, essaye de copier ton ordre de création de fonction dans une fenêtre SQL*PLUS par exemple et de voir si l'erreur persiste.

  6. #6
    Membre averti
    Inscrit en
    Juillet 2006
    Messages
    19
    Détails du profil
    Informations forums :
    Inscription : Juillet 2006
    Messages : 19
    Par défaut
    Je n'utilise que les "SQL Window"s sur PL/SQL Dev et j'ai essayé de copier/coller dans un SQL*Plus et ah ah ! J'ai bien une erreur qui apparaît.

    Dans les SQL Window, quand on créé des fonctions, PL/SQL Dev n'est pas sensé afficher les erreurs ? O_o

    Edit : J'ai réussi à "résoudre" mon problème en enlevant le "/" de la dernière ligne.
    Étrange quand même...

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème avec une fonction
    Par mademoizel dans le forum Général JavaScript
    Réponses: 6
    Dernier message: 24/06/2006, 10h51
  2. problème avec une fonction javaScript
    Par volthur dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 16/05/2006, 18h04
  3. Problème avec une fonction utilisateur !
    Par nalou dans le forum MS SQL Server
    Réponses: 4
    Dernier message: 20/04/2006, 17h06
  4. Problème avec une fonction et un array
    Par Neal Morse dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 28/08/2005, 12h04
  5. Problème avec une fonction date.
    Par kmayoyota dans le forum ASP
    Réponses: 8
    Dernier message: 09/09/2004, 12h33

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo