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

Oracle Discussion :

fonction LAG et erreur PLS-00103. Oracle 8i


Sujet :

Oracle

  1. #1
    Candidat au Club
    Profil pro
    Inscrit en
    Février 2005
    Messages
    1
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2005
    Messages : 1
    Points : 2
    Points
    2
    Par défaut fonction LAG et erreur PLS-00103. Oracle 8i
    Bonjour
    j'ai emprunté le code suivant dans un article sur les fonctions analytiques
    Lorsque j'exécute le code

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select    isin, Date_cotation,Premier,PHaut,PBas,Dernier,volume,
                LAG(Dernier,1) over(partition by isin order by Date_cotation
                FROM A_COTATIONS;
    cela fonctionne très bien dans l'éditeur SQL.

    Par contre dans un package
    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
     
    CREATE OR REPLACE PACKAGE bb IS
    PROCEDURE Statistiques;
     
    END bb;
    /
    CREATE OR REPLACE PACKAGE BODY bb AS
    PROCEDURE Statistiques IS	  
    v_isin			Number;
    v_date_cotation	Date;
    v_Premier		Number;
    v_PHaut			Number;
    v_PBas			Number;
    v_dernier		Number;
    v_volume		Number;
    v_precedent		Number;
     
    Begin
    select isin, Date_cotation,Premier,PHaut,PBas,Dernier,volume,
    	   LAG(Dernier,1) over(partition by isin order by Date_cotation) precedent  	   	   	   	   
    		Into v_isin,v_date_cotation,v_Premier,v_PHaut,v_PBas,v_dernier,v_volume,
    			 v_precedent
    	   FROM A_COTATIONS; 
     
    End Statistiques;
    END bb;
    /
    j'obtiens le message d'erreur :
    PLS-00103: Symbole "(" rencontré à la place d'un des symboles suivants : , from into bulk
    La description du message d'erreur dans la doc Oracle ne me permet pas de résoudre ce probleme.

  2. #2
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    >>>>> [A LIRE AVANT DE POSTER] Règles et info

    Citation Envoyé par orafrance
    - En tout premier lieu, pensez à indiquer la version de vos outils
    Citation Envoyé par orafrance
    Eviter tant que possible les problèmes strictement liés à des erreurs de syntaxe

  3. #3
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Points : 35
    Points
    35
    Par défaut
    Les fonctions anlytiques oracle sont des fonctions SQL et ne marchent pas en PL-SQL à moins d'utiliser du NDS (Native Dynamic SQL : execute immediate...)

  4. #4
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par terence
    Les fonctions anlytiques oracle sont des fonctions SQL et ne marchent pas en PL-SQL à moins d'utiliser du NDS (Native Dynamic SQL : execute immediate...)
    pas du tout

    Exemple :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    DECLARE
    toto NUMBER;
    BEGIN
    select 1
    into toto
    from (
     select table_name, RANK() OVER (order by table_name) a from user_tables )
     where  a  between 10 and 20
     and rownum = 1;
     dbms_output.put_line(toto);
    END;
    1

    Procédure PL/SQL terminée avec succès.

  5. #5
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Février 2004
    Messages
    25
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2004
    Messages : 25
    Points : 35
    Points
    35
    Par défaut
    Désolé de te contredire mais en 8i les fonctions analytiques ne marchent pas en PL (seulement à partir de la 9i) , voila ce que j'ai quand j'exécute ton bloc sur ma 8.1.7:

    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
     
    SQL> DECLARE
      2  toto NUMBER;
      3  BEGIN
      4  select 1
      5  into toto
      6  from (
      7   select table_name, RANK() OVER (order by table_name) a from user_tables )
      8   where  a  between 10 and 20
      9   and rownum = 1;
     10   dbms_output.put_line(toto);
     11  END;
     12  /
     select table_name, RANK() OVER (order by table_name) a from user_tables )
                                    *
    ERROR at line 7:
    ORA-06550: line 7, column 33:
    PLS-00103: Encountered the symbol "(" when expecting one of the following:
    , from

    voila un petit lien de asktom pour achever de te convaincre:
    http://asktom.oracle.com/pls/ask/f?p=4950:8:::::F4950_P8_DISPLAYID:3027089372477

  6. #6
    Rédacteur

    Inscrit en
    Septembre 2004
    Messages
    626
    Détails du profil
    Informations forums :
    Inscription : Septembre 2004
    Messages : 626
    Points : 848
    Points
    848
    Par défaut
    D'où l'intérêt d'indiquer systématiquement la version d'Oracle utilisée


    Laly.
    In the heart of the truly greats, perfection is never achieved but endlessly pursued.

    Mon article sur les fonctions analytiques d'Oracle (calcul de moyennes mobiles, de quartiles et bien d'autres...)

  7. #7
    Membre expert
    Avatar de LeoAnderson
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    2 938
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2004
    Messages : 2 938
    Points : 3 199
    Points
    3 199
    Par défaut
    Bien sûr, mais en l'occurence, la version est indiquée, dans le titre du message ! ;-)

  8. #8
    Expert éminent sénior
    Avatar de orafrance
    Profil pro
    Inscrit en
    Janvier 2004
    Messages
    15 967
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 073
    Points
    19 073
    Par défaut
    Citation Envoyé par terence
    Désolé de te contredire mais en 8i les fonctions analytiques ne marchent pas en PL (seulement à partir de la 9i)
    au temps pour moi, tu as parfaitement raison

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

Discussions similaires

  1. erreur [PLS-00103: Symbole "=" rencontré ]
    Par zaineb.z dans le forum Débuter
    Réponses: 27
    Dernier message: 21/02/2008, 14h25
  2. [PL/SQL] Erreur PLS-00103 dans un trigger
    Par sami.g dans le forum Oracle
    Réponses: 1
    Dernier message: 18/12/2006, 17h57
  3. Réponses: 4
    Dernier message: 23/05/2006, 17h04
  4. erreur PLS-00103 sur une fonction
    Par atruong dans le forum Oracle
    Réponses: 2
    Dernier message: 28/04/2006, 13h49
  5. Erreur PLS 00103
    Par claralavraie dans le forum Oracle
    Réponses: 4
    Dernier message: 05/01/2006, 17h44

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