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*Plus Oracle Discussion :

la commande sql ne se termine pas correctement


Sujet :

Sql*Plus Oracle

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 65
    Points
    65
    Par défaut la commande sql ne se termine pas correctement
    Bonjour je commence en sql et je ne comprends pas une de mes erreurs. Voici le code:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
     
    SQL>  select noArticle, SUM(quantitée) AS quantitéecommandée
      2   from lignecommande
      3  group by noArticle
      4  order by noarticle
      5  having SUM(quantitée) >= 0
      6  ;
    Le message d'erreur est que la ligne 5 ne se termine pas correctement,
    est-ce que quelqu'un pourrait m'aider??

  2. #2
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select * from 
         (SELECT noArticle, SUM(quantitée) AS quantitéecommandée
      2   FROM lignecommande
      3  GROUP BY noArticle
      4  ORDER BY noarticle)
      5  where quantitéecommandée >= 0 ;

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Points : 78
    Points
    78
    Par défaut
    Le ORDER BY doit être en dernier (donc après le HAVING).

  4. #4
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par xavi Voir le message
    Le ORDER BY doit être en dernier (donc après le HAVING).
    De plus le GROUP BY fait un ORDER BY implicite.

  5. #5
    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
    Points : 3 609
    Points
    3 609
    Par défaut
    Citation Envoyé par c.langlet Voir le message
    essai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    select * from 
         (SELECT noArticle, SUM(quantitée) AS quantitéecommandée
      2   FROM lignecommande
      3  GROUP BY noArticle
      4  ORDER BY noarticle)
      5  where quantitéecommandée >= 0 ;
    Quel est l'intérêt ?

    Essaie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL>  SELECT noArticle, SUM(quantitée) AS quantitéecommandée
      2   FROM lignecommande
      3  GROUP BY noArticle
      4  HAVING SUM(quantitée) >= 0
      5  ORDER BY noarticle;
    L'order by doit etre mis en dernier
    Un problème sans solution est un problème mal posé

    Merci de poser vos questions sur le forum, je ne réponds pas aux questions posées par MP.

  6. #6
    Membre expert

    Profil pro
    Inscrit en
    Février 2006
    Messages
    3 437
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2006
    Messages : 3 437
    Points : 3 597
    Points
    3 597
    Par défaut
    Citation Envoyé par xavi Voir le message
    De plus le GROUP BY fait un ORDER BY implicite.
    C'est faux.

  7. #7
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Points : 78
    Points
    78
    Par défaut
    Citation Envoyé par pifor Voir le message
    Effectivement : c'est faux.
    Il s'agit d'une mauvaise habitude prise avec le mode RULE de la version 7.3.
    Les évolutions de l'optimiseur à partir de la version 9 n'autorisent plus ce genre de tour de passe passe.
    shame on me (je travaille encore sur de la 7.3 )

  8. #8
    Membre averti
    Profil pro
    Inscrit en
    Août 2005
    Messages
    316
    Détails du profil
    Informations personnelles :
    Âge : 53
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 316
    Points : 388
    Points
    388
    Par défaut
    Citation Envoyé par plaineR Voir le message
    Quel est l'intérêt ?

    Essaie plutôt :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SQL>  SELECT noArticle, SUM(quantitée) AS quantitéecommandée
      2   FROM lignecommande
      3  GROUP BY noArticle
      4  HAVING SUM(quantitée) >= 0
      5  ORDER BY noarticle;
    L'order by doit etre mis en dernier
    Mea maxima culpa, aucun interet

  9. #9
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 65
    Points
    65
    Par défaut une partie du problème réglé...
    Alors rebonjour. Merci, j'ai appris qu'il fallait mettre ORDER BY à la fin du code et ca fonctionne. Mais on dirait que ca ne règle pas mon problème. En fait dans ma liste je ne réussi pas à afficher les valeurs nulles.

    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
    SQL> select noarticle, sum(quantitéé) as quantitéecommandée
      2  from lignecommande
      3  group by noarticle
      4  having sum(quantitéé) >= 0
      5  order by noarticle;
     
     NOARTICLE QUANTIT?ECOMMAND?E
    ---------- ------------------
            10                 20
            20                  9
            40                  4
            50                  2
            70                  8
            90                  1
            95                  3
     
    7 ligne(s) selectionnee(s).
    Dans ce cas, certains articles ont des valeurs nulles et je ne réussi pas à les afficher... J'aurais cru qu'en mettant HAVING SUM() >=0, ca aurait fonctionné...

    Merci!

  10. #10
    Membre régulier
    Profil pro
    Inscrit en
    Août 2005
    Messages
    68
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2005
    Messages : 68
    Points : 78
    Points
    78
    Par défaut
    null n'est pas égal à 0.
    Les opérateurs de comparaison numériques (=, >= , etc ) écartent les valeurs nulles.

    En supposant que tu souhaites que null soit égal à 0 (ce qui n'est pas évident en soit et dépend de ton modèle métier), tu peux utiliser la fonction nvl :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
     SELECT noarticle, sum(nvl(quantitéé,0)) AS quantitéecommandée
      2  FROM lignecommande
      3  GROUP BY noarticle
      4  HAVING sum(nvl(quantitéé,0)) >= 0
      5  ORDER BY noarticle;

  11. #11
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 65
    Points
    65
    Par défaut
    D'accord alors je me trompe, je voulais dire certaine valeur sont égale à 0 et le code précédent ne les affiche pas avec le HAVING >= 0...

    Merci

  12. #12
    Membre du Club
    Profil pro
    Inscrit en
    Septembre 2007
    Messages
    81
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2007
    Messages : 81
    Points : 65
    Points
    65
    Par défaut
    Merci mon problème est résolu, je devais utiliser un natural left join. Je n'ai pas su exposer mon problème comme il se devait mais je vous remercie beaucoup tout de même!

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

Discussions similaires

  1. la commande sql ne se termine pas correctement
    Par jean sami dans le forum Bases de données
    Réponses: 12
    Dernier message: 18/09/2008, 14h03
  2. la commande SQL ne se termine pas correctement
    Par FullOver dans le forum Struts 1
    Réponses: 15
    Dernier message: 21/05/2008, 19h26
  3. la commande sql ne se termine pas correctement
    Par watiero dans le forum SQL
    Réponses: 5
    Dernier message: 01/10/2007, 10h19
  4. Réponses: 5
    Dernier message: 21/08/2007, 13h47
  5. ORA-00933 la commande SQL ne se termine pas correctement
    Par habasque dans le forum Sql*Plus
    Réponses: 1
    Dernier message: 09/12/2006, 14h41

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