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 :

Decode, sign : Missing right parenthesis


Sujet :

SQL Oracle

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut Decode, sign : Missing right parenthesis
    Bonjour,

    J'obtiens une erreur sur cette requête en SQL sous Oracle 10g.
    Il me met qu'il manque une parentheses de droite en erreur mais bon des fois les erreurs oracle ...
    Mes variables sont bien renseignées j'ai vérifié.
    Si vous avez une idée, Merci.

    Voici la fameuse requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    Req:="UPDATE CONTROLE_GAMME_EC "+
                "SET VALE_FREQ_REEL=VALE_FREQ_REEL+"+
           "(("+FormaterTempsBD(DateActuelle)+
            "-DECODE(SIGN("+FormaterTempsBD (EvtProduction.EVPDateDebuProd)   +"-DEBU_FREQ)>0,"+
    FormaterTempsBD(EvtProduction.EVPDateDebuProd)+",DEBU_FREQ))*86400)"+
              " WHERE CODE_MACH="+StrqBD(EvtProduction.EVPCodeMach)+
                  " AND CODE_TYPE_FREQ IN ("+ChaineMAJControle+")"+
                  " AND CODE_ARTI IN (SELECT DISTINCT CODE_ARTI FROM EVT_PRODUCTION_EC WHERE CODE_MACH="+StrqBD(EvtProduction.EVPCodeMach)+
                      " AND CODE_TACH="+StrqBD(CodeTachProd)+")";
          Rep:=ExecuteRequeteSQL(Req);
          Fermeture:=FermeReponseSQL(Rep);
    Merci de vos futures réponses.

  2. #2
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Affichez le contenu de la variable Req avant de l'exécuter. Ensuite il devrait être simple à trouver l'erreur.

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut
    Rebonjour,

    "UPDATE CONTROLE_GAMME_EC SET VALE_FREQ_REEL=VALE_FREQ_REEL+((TO_DATE('12/11/2008 09:44:07', 'DD/MM/Y"
    "YYY HH24:MI:SS')-DECODE(SIGN(TO_DATE('12/11/2008 08:49:48', 'DD/MM/YYYY HH24:MI:SS')-DEBU_FREQ)>0,TO"
    "_DATE('12/11/2008 08:49:48', 'DD/MM/YYYY HH24:MI:SS'),DEBU_FREQ))*86400) WHERE CODE_MACH='STD_MSP_05"
    "' AND CODE_TYPE_FREQ IN ('TPSOUV') AND CODE_ARTI IN (SELECT DISTINCT CODE_ARTI FROM EVT_PRODUCTION_E"
    "C WHERE CODE_MACH='STD_MSP_05' AND CODE_TACH='PROD')"
    Voici ce que je récupère et je ne vois vraiment rien d'anormal.
    Si quelqu'un à des yeux d'orfèvres ^^.

  4. #4
    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
    Regarde comme l'erreur te l'indique où tu as un "decode(sign" et vérifie que le nombre de parenthèses fermantes est équivalent au nombre de parenthèses ouvrantes.

  5. #5
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    D'abord voilà la requête formatée
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    UPDATE CONTROLE_GAMME_EC 
       SET VALE_FREQ_REEL=VALE_FREQ_REEL + 
          ((TO_DATE('12/11/2008 09:44:07', 'DD/MM/YYYY HH24:MI:SS') - 
            DECODE(SIGN(TO_DATE('12/11/2008 08:49:48', 'DD/MM/YYYY HH24:MI:SS') - DEBU_FREQ) > 0 ,
                        TO_DATE('12/11/2008 08:49:48', 'DD/MM/YYYY HH24:MI:SS') ,
                        DEBU_FREQ))*86400) 
    WHERE CODE_MACH='STD_MSP_05' 
      AND CODE_TYPE_FREQ IN ('TPSOUV') 
      AND CODE_ARTI IN (SELECT DISTINCT CODE_ARTI 
                          FROM EVT_PRODUCTION_EC 
                         WHERE CODE_MACH='STD_MSP_05' 
                           AND CODE_TACH='PROD')
    et maintenat c'est facile à trouver ce qui ne va pas
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
            DECODE(SIGN(TO_DATE('12/11/2008 08:49:48', 'DD/MM/YYYY HH24:MI:SS') - DEBU_FREQ)  > 0,

  6. #6
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut
    Merci pour le formatage de la requete.

    Mais je ne trouve toujours pas pourquoi, il me met toujours qu'il manque une parenthese de droite.

    Si la condition "> 0" n'est pas respectée, normalement il devrait prendre l'argument suivant ? (un peu comme sous une base SQL avec le case when else ?).

    Merci.

  7. #7
    Scorpi0
    Invité(e)
    Par défaut
    De toute évidence, non.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select DECODE(1>0,1,1,0)
    from dual
    Erreur Missing right parenthesis

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    select case when 1 > 0 then 1 else 0 end
    from dual
    Ca marche.

    Sinon tu peux ruser :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    SELECT DECODE(SIGN(1-0),-1,1,0)
    FROM dual
    Dans ton cas ça donnerait :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    DECODE
    (
    SIGN(TO_DATE('12/11/2008 08:49:48', 'DD/MM/YYYY H24:MI:SS')-DEBU_FREQ),
    1,
    TO_DATE('12/11/2008 08:49:48', 'DD/MM/YYYY HH24:MI:SS') ,
    DEBU_FREQ
    )

  8. #8
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Irianne Voir le message
    ...
    Si la condition "> 0" n'est pas respectée, normalement il devrait prendre l'argument suivant ? (un peu comme sous une base SQL avec le case when else ?).

    Merci.
    DECODE(expr,search,result[,search,result]...[,default])

    DECODE compares expr to each search value one by one. If expr is equal to a search, then Oracle returns the corresponding result. If no match is found, then Oracle returns default. If default is omitted, then Oracle returns null.

  9. #9
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut
    Merci à tous,

    Donc j'ai rusé comme tu as dit ScorpiO, je n'ai plus mon message d'erreur, il faut que je voies maintenant si cela me retourne les bonnes valeurs ou non.

    Bye

  10. #10
    Modérateur
    Avatar de Waldar
    Homme Profil pro
    Sr. Specialist Solutions Architect @Databricks
    Inscrit en
    Septembre 2008
    Messages
    8 454
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 47
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Sr. Specialist Solutions Architect @Databricks
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2008
    Messages : 8 454
    Par défaut
    Ce n'est pas spécialement une ruse, c'est l'utilisation normale.

    Par contre, pourquoi n'utilisez-vous directement CASE ? A moins que vous soyez sur une antique version d'Oracle, ça fonctionne très bien également.

  11. #11
    Membre à l'essai
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    5
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2004
    Messages : 5
    Par défaut
    Le Case ne passe pas sur l'utilisation de ma 10g, certaines fonctions comme le Case ne sont pas disponibles, javais déjà essayé .

    l'appli regarde si je suis connecté sur une base sql ou oracle et donc j'ai un else (si c'est oracle jutilise le decode sinon jutilise le case).

  12. #12
    Expert confirmé Avatar de mnitu
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Octobre 2007
    Messages
    5 611
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Marne (Champagne Ardenne)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Octobre 2007
    Messages : 5 611
    Par défaut
    Citation Envoyé par Irianne Voir le message
    Le Case ne passe pas sur l'utilisation de ma 10g...
    Le Case passe à partir de la version 8.1
    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> select banner from v$version;
     
    BANNER
    ----------------------------------------------------------------
    Oracle8i Enterprise Edition Release 8.1.7.4.0 - Production
    PL/SQL Release 8.1.7.4.0 - Production
    CORE	8.1.7.0.0	Production
    TNS for IBM/AIX RISC System/6000: Version 8.1.7.4.0 - Production
    NLSRTL Version 3.4.1.0.0 - Production
     
    SQL> 
    SQL> SELECT case when 1 > 0 then 1 else 0 end
      2  FROM dual
      3  ;
     
    CASEWHEN1>0THEN1ELSE0END
    ------------------------
                           1

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 26/09/2014, 11h00
  2. Réponses: 1
    Dernier message: 28/11/2013, 14h46
  3. ORA-00907 Missing right parenthesis
    Par lola06 dans le forum SQL
    Réponses: 16
    Dernier message: 02/12/2011, 16h45
  4. COALESCE requête missing right parenthesis
    Par molesqualeux dans le forum SQL
    Réponses: 8
    Dernier message: 18/02/2011, 11h36
  5. "Missing right parenthesis" à cause d'une fonction dans l'ORDER BY
    Par logari dans le forum VB 6 et antérieur
    Réponses: 1
    Dernier message: 12/05/2010, 14h18

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