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

PL/SQL Oracle Discussion :

Erreur sur Fonction PL/SQL


Sujet :

PL/SQL Oracle

  1. #1
    Nouveau membre du Club
    Inscrit en
    Février 2006
    Messages
    52
    Détails du profil
    Informations forums :
    Inscription : Février 2006
    Messages : 52
    Points : 34
    Points
    34
    Par défaut Erreur sur Fonction PL/SQL
    Bonjour, je viens demander de l'aide parce que je commence à péter un cable, j'essaye de compiler une fonction PL/SQL et impossible de trouver pourquoi ça ne compile pas.. je crois avoir tout essayé..

    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
    CREATE OR REPLACE
    FUNCTION APPETIT_DEPEND_DE_ECAILLES RETURN VARCHAR2 IS
     
    DECLARE
      CURSOR App_ecailles IS
        SELECT d1.dragon, d1.nombreecailles, a1.totalcal AS appetit, ROUND (a1.totalcal/d1.nombreecailles,2) AS rapport
        FROM DRAGONS d1, APPETIT a1 
        WHERE d1.dragon = a1.dragon;
        App_prec App_ecailles%rowtype;
        App_cour App_ecailles%rowtype;
     
    BEGIN
      OPEN App_ecailles;
        FETCH App_ecailles INTO App_prec;
        LOOP
          FETCH App_ecailles INTO App_cour;
          EXIT WHEN App_ecailles%notfound;
          IF App_cour.appetit < App_prec.appetit
            THEN RETURN('NON');
            App_prec := App_cour;
          END IF; 
        END LOOP;
      CLOSE App_ecailles; 
    END APPETIT_DEPEND_DE_ECAILLES;
    Mon Log de compilation:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    Error(4,1): PLS-00103: Symbole "DECLARE" rencontré à la place d'un des symboles suivants :     begin function package pragma procedure subtype type use    <identificateur> <identificateur entre guillemets> form    current cursor external language Symbole "begin" a été substitué à "DECLARE" pour continuer. 
    Error(24,31): PLS-00103: Symbole "end-of-file" rencontré à la place d'un des symboles suivants :     begin case declare end exception exit for goto if loop mod    null pragma raise return select update while with    <identificateur> <identificateur entre guillemets>    <variable bind> << close current delete fetch lock insert    open rollback savepoint set sql execute commit forall merge    pipe
    Je bosse sous SQL Developper 1.2.1 avec une base Oracle 10g Express Edition.

    Si vous avez la moindre idée de résolution, je vous remercie d'avance pour votre aide !

  2. #2
    Rédactrice

    Avatar de kalyparker
    Femme Profil pro
    Consultant en Business Intelligence
    Inscrit en
    Janvier 2007
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France

    Informations professionnelles :
    Activité : Consultant en Business Intelligence

    Informations forums :
    Inscription : Janvier 2007
    Messages : 1 327
    Points : 2 998
    Points
    2 998
    Par défaut
    Bonjour,

    au premier coup d'oeil je dirais que tu dois enlever le declare.
    Lorsque l'on crée un bloc pl ce mot est necessaire et obligatoire en cas de declaration de variable, mais lorsque l'on crée une fonction il est interdit

    Par contre j'ai l'impression qu'il te manque quelque chose dans ta fonction : le cas tu ne retourne pas 'NON' (donc le 'OUI'), je ne sais plus si le pl te sortira une erreur, mais pour la comprehension c'est toujours mieux d'avoir les 2 cas

    voili, voilou
    It isn't that they can't see the solution, it's that they can't see the problem.
    Mes Articles et Traductions (Microstrategy, Css et Javascript)
    Si vous souhaitez contribuer à la rubrique BI, contactez-moi ou tout autre membre de l'équipe BI par MP.

  3. #3
    Membre éprouvé Avatar de shaun_the_sheep
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Octobre 2004
    Messages
    1 619
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Enseignement

    Informations forums :
    Inscription : Octobre 2004
    Messages : 1 619
    Points : 996
    Points
    996
    Par défaut
    Bonjour,

    Le DECLARE est inutile en début de fonction.

    Tu déclares ensuite tes variables ou curseur entre le Is et le Begin.

    Sinon quelque chose me semble curieu dans ton code :
    IF App_cour.appetit < App_prec.appetit
    THEN RETURN('NON');
    App_prec := App_cour;
    END IF;
    Je pense qu'il manque un Else soit :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
          IF App_cour.appetit < App_prec.appetit
            THEN RETURN('NON');
          ELSE
            App_prec := App_cour;
          END IF;

Discussions similaires

  1. Erreurs sur procédure PL/SQL avec fonction case
    Par Djene dans le forum PL/SQL
    Réponses: 2
    Dernier message: 07/10/2011, 17h19
  2. Erreur sur fonction d'extraction des mots
    Par Siguillaume dans le forum Langage
    Réponses: 16
    Dernier message: 11/06/2008, 10h16
  3. Erreur sur une Requete SQL - SELECT
    Par Freud44 dans le forum C++Builder
    Réponses: 6
    Dernier message: 26/05/2008, 11h39
  4. [MySQL] Erreur sur fonction PHP
    Par lothar59 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 04/03/2007, 11h31
  5. Erreur sur fonction
    Par all4linux dans le forum C
    Réponses: 2
    Dernier message: 30/06/2006, 10h40

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