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 :

Problème proc. stockée sous Oracle 8


Sujet :

Oracle

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Par défaut Problème proc. stockée sous Oracle 8
    Bonjour,

    J'ai le INSERT - SELECT suivant dans une proc. stockée :

    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
     
    INSERT 
      INTO ENVELOPPE
    select distinct CODE_MARCHE_NATIONAL, 
                    MAPU.NUMERO_PERIODE, 
                    DATE_DEBUT_PERIODE, 
    		DATE_FIN_PERIODE, 
    		MAPU.NUMERO_LOT, 
    		MAPU.code_uag , 
                    MAPU.MT_MAX_UAG, 
                    MAPU.MT_MAX_UAG - (Select NVL(SUM(MONTANT_HT_EJ),0) TOTAL
                                       FROM EJ
                                       WHERE EJ.NUMERO_PERIODE =  MAPU.NUMERO_PERIODE
                                         AND EJ.NUMERO_LOT = MAPU.NUMERO_LOT 
                                         AND EJ.MARCHE = V_MARCHE.CODE_MARCHE_NATIONAL
                                         AND EJ.CODE_UAG = MAPU.code_uag)
    from MONTANT_AUTORISE_PAR_UAG MAPU,
        (select distinct id_marche,CODE_MARCHE_NATIONAL from marche
          where CODE_STATUT = 'N'
            and CODE_PRM <> '02') V_MARCHE,  PERIODE     
    WHERE MAPU.id_marche = V_MARCHE.id_marche
      AND MAPU.ID_PERIODE = PERIODE.ID_PERIODE;
    Cet INSERT fonctionne sous SQL*Plus mais me renvoie l'erreur suivante lorsque je compile la proc. stockée :

    Erreurs pour PROCEDURE P_TEST1 :

    LINE/COL ERROR
    -------- ----------------------------------------------------------------
    19/36 PLS-00103: Symbole "SELECT" rencontrÚ Ó la place d'un des
    symboles suivants :
    ( - + mod not null others <an identifier>
    <a double-quoted delimited-identifier> <a bind variable> avg
    count current exists max min prior sql stddev sum variance
    execute forall time timestamp interval date
    <a string literal with character set specification>
    <a number> <a single-quoted SQL string>

    25/1 PLS-00103: Symbole "FROM" rencontrÚ Ó la place d'un des symboles
    suivants :

    LINE/COL ERROR
    -------- ----------------------------------------------------------------
    ; return returning and or
    Auriez-vous une idée ?

    Merci.

  2. #2
    Membre confirmé Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Par défaut
    La ligne 19 c'est laquelle ? ^_^
    Si tu pouvais nous mettre la procédure en entier.

    Merci.

    Bahan

  3. #3
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Par défaut
    Voici la proc. stockée en entier :

    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
     
    CREATE OR REPLACE PROCEDURE p_test1( pVar_codret in out number, pOra_error in out varchar2 ) IS
     
    BEGIN
     
    INSERT 
      INTO ENVELOPPE
    select distinct CODE_MARCHE_NATIONAL, 
                    MAPU.NUMERO_PERIODE, 
                    DATE_DEBUT_PERIODE, 
    		DATE_FIN_PERIODE, 
    		MAPU.NUMERO_LOT, 
    		MAPU.code_uag , 
                    MAPU.MT_MAX_UAG, 
                    MAPU.MT_MAX_UAG - (Select NVL(SUM(MONTANT_HT_EJ),0) TOTAL
                                       FROM EJ
                                       WHERE EJ.NUMERO_PERIODE =  MAPU.NUMERO_PERIODE
                                         AND EJ.NUMERO_LOT = MAPU.NUMERO_LOT 
                                         AND EJ.MARCHE = V_MARCHE.CODE_MARCHE_NATIONAL
                                         AND EJ.CODE_UAG = MAPU.code_uag)
    from MONTANT_AUTORISE_PAR_UAG MAPU,
        (select distinct id_marche,CODE_MARCHE_NATIONAL from marche
          where CODE_STATUT = 'N'
            and CODE_PRM <> '02') V_MARCHE,  PERIODE     
    WHERE MAPU.id_marche = V_MARCHE.id_marche
      AND MAPU.ID_PERIODE = PERIODE.ID_PERIODE;
     
     
    END p_test1;
    /
    La ligne 19 correspond au SELECT après le ' - ' ( moins : signe négatif ).

  4. #4
    Membre confirmé Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Par défaut
    Nous pourrions peut-être essayer ça.

    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
    CREATE OR REPLACE PROCEDURE p_test1
      (  pVar_codret IN OUT NUMBER
      ,  pOra_error IN OUT VARCHAR2)
    IS
      vRequete VARCHAR2(4000);
      vNomFonction VARCHAR2(50);
      vErrReq EXCEPTION;
    BEGIN
      vNomFonction := 'p_test1';
     
      vRequete := '
        INSERT INTO ENVELOPPE
        SELECT DISTINCT
          CODE_MARCHE_NATIONAL, 
          MAPU.NUMERO_PERIODE, 
          DATE_DEBUT_PERIODE, 
          DATE_FIN_PERIODE, 
          MAPU.NUMERO_LOT, 
          MAPU.code_uag, 
          MAPU.MT_MAX_UAG, 
          MAPU.MT_MAX_UAG - (
                SELECT NVL(SUM(MONTANT_HT_EJ),0) TOTAL
                FROM EJ
                WHERE EJ.NUMERO_PERIODE =  MAPU.NUMERO_PERIODE
                AND EJ.NUMERO_LOT = MAPU.NUMERO_LOT 
                AND EJ.MARCHE = V_MARCHE.CODE_MARCHE_NATIONAL
                AND EJ.CODE_UAG = MAPU.code_uag)
        FROM
          MONTANT_AUTORISE_PAR_UAG MAPU,
          (
            SELECT DISTINCT 
              id_marche,
              CODE_MARCHE_NATIONAL 
            FROM marche
            WHERE CODE_STATUT = ''N''
            AND CODE_PRM <> ''02''
          ) V_MARCHE,
          PERIODE
        WHERE MAPU.id_marche = V_MARCHE.id_marche
        AND MAPU.ID_PERIODE = PERIODE.ID_PERIODE
      ';
     
      EXECUTE IMMEDIATE vRequete;
    EXCEPTION
      WHEN vErrReq THEN
        DBMS_OUTPUT.put_line(vNomFonction||'\ERREUR dans la requête : '||vRequete);
      WHEN OTHERS THEN
        DBMS_OUTPUT.put_line(vNomFonction||'\ERREUR Oracle '||TO_NUMBER(SQLCODE)||' : '||SQLERRM);
    END p_test1;
    Je vois que tu mets un code retour dans tes paramètres, ne voudrais-tu pas dans ce cas utiliser une fonction plutôt qu'une procédure stockée ?

    Cdt.

    Bahan

  5. #5
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Par défaut
    Le code retour est pour les messages d'erreurs. Je n'ai pas mis toute la proc.

    Le problème vient de ce INSERT SELECT.

    Ce que je ne comprends pas, c'est pourquoi il passe sous SQL*Plus et pas dans une proc. stockée. ???

  6. #6
    Membre confirmé Avatar de Bahan
    Inscrit en
    Avril 2006
    Messages
    147
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2006
    Messages : 147
    Par défaut
    Là, cela ne passe toujours pas ?

    Vous avez essayé de la compiler (ça doit marcher ça ^_^) et de la lancer ?
    Pourriez-vous m'afficher le buffer de sortie ?

    Une autre question : quel front end utilisez-vous ? PL/SQL developper ? Toad ?

    Bahan

  7. #7
    Membre éclairé
    Inscrit en
    Novembre 2004
    Messages
    312
    Détails du profil
    Informations forums :
    Inscription : Novembre 2004
    Messages : 312
    Par défaut
    Je suis bien en 8i, mais je vais essayer quand même ta proposition.

    Merci beaucoup !

Discussions similaires

  1. [MySQL] Problème Proc Stockée, s'éxecute sous PhpMyAdmin mais pas avec PHP
    Par toham dans le forum PHP & Base de données
    Réponses: 0
    Dernier message: 07/02/2012, 16h55
  2. Problème de requête sous Oracle
    Par tukutt dans le forum SGBD
    Réponses: 1
    Dernier message: 23/05/2008, 09h37
  3. Problème avec NVL sous ORACLE
    Par tchoimars dans le forum SQL
    Réponses: 4
    Dernier message: 21/05/2007, 16h35
  4. Réponses: 9
    Dernier message: 23/09/2006, 17h13
  5. Réponses: 2
    Dernier message: 29/03/2006, 09h38

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