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 :

Requete qui marche sur une base et pas sur une autre !


Sujet :

Oracle

  1. #1
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut Requete qui marche sur une base et pas sur une autre !
    Bonjour,

    J'ai un problème par rapport à l'exécution d'une requête SQL sur Oracle 10g

    Exemple de requête :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    select T1.Code,
            (select sum (Montant) as montant 
             from T2
             group by T2.code
             having T2.code = T1.code)
    from T1
    Cette requête s'exécute sans problème sur l'environnement DEV mais ça donne l'erreur suivante sur l'environnent client :

    ORA-00979 n'est pas une expression GROUP BY

    Je pense que ça une relation avec lles paramètres 'installation de la base.
    Est ce que quelqu'un d'entre vous a déja vu ce type de problème

  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 : 47
    Localisation : France

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Elle est fausse tout simplement

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    select T1.Code,sum (Montant)
    from T1,T2
             Where T2.code = T1.code
             group by T2.code
    Ce qui est étonnant c'est que ça marche en dév

  3. #3
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Oui j'ai compris que c'est faux mais la requête est beaucoup plus complexe que celle que j'ai envoyé et d'ailleurs il fallait mettre plutôt un where au lieu de having

    Ce qui m'interesse est le truc qui fait que ça marche en DEV et pas chez le client. Si on a une configuration qui fait passer de telles instructions de la modifier afin de détecter ce genre de problèmes en interne

  4. #4
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    J'ai reproduit ta requete avec les tables EMP et DEPT de SCOTT, ca marche en 10.2.0.4 :
    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
    Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - Production
    With the Partitioning, OLAP, Data Mining and Real Application Testing options
     
    SQL> select t1.dname, 
      2         (select sum(sal) as salaires 
      3          from emp t2 
      4          group by t2.deptno 
      5          having t1.deptno=t2.deptno) as sal 
      6  from dept t1;
     
    DNAME                 SAL
    -------------- ----------
    ACCOUNTING           8750
    RESEARCH            10875
    SALES                9400
    OPERATIONS
     
    SQL>
    Es-tu sur d'avoir les memes versions des deux cotes ?

    Nicolas.

  5. #5
    Expert confirmé
    Profil pro
    Inscrit en
    Août 2008
    Messages
    2 949
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Août 2008
    Messages : 2 949
    Points : 5 848
    Points
    5 848
    Par défaut
    Il ne faut pas corréler les requêtes dans la clause HAVING, c'est évidemment dans la clause WHERE qu'il faut corréler :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    SELECT t1.dname,
           (SELECT sum(sal) AS salaires
            FROM emp t2
            where t2.deptno=t1.deptno) AS sal
    FROM dept t1;

  6. #6
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    La version que j'ai en local est Oracle 9.2
    Le problème est apparu chez trois clients :
    Le premier a la version 10.2
    Le deuxième a la version 9.2

    Donc c'est pas question de version, il s'agit d'autre chose

  7. #7
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    Par rapport à ta réponse skuatamad, je suis totalement d'accord avec toi. C'est simple de parcourir tous la couche d'accés au données et de remplacer le having si c'est pas bien utlisé mais la contrainte qui se pose est qui peut assurer qu'un autre problème pas lié à having va apparaitre. D'où l'utilité de chercher la ause pour laquelle ces requêtes marchent sur le DEV.
    Une remarque on une vigntaine de clients qui travaillent avec cette requête sans problème.
    J'espère que t'as compris mes soucis

  8. #8
    Membre confirmé Avatar de NGasparotto
    Inscrit en
    Janvier 2007
    Messages
    421
    Détails du profil
    Informations forums :
    Inscription : Janvier 2007
    Messages : 421
    Points : 603
    Points
    603
    Par défaut
    Citation Envoyé par fatati Voir le message
    La version que j'ai en local est Oracle 9.2
    Le problème est apparu chez trois clients :
    Le premier a la version 10.2
    Le deuxième a la version 9.2
    Quel patchset level 10.2.0.x ? Quel patchset 9.2.0.x ?

    Nicolas.

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    Selon moi, ce qui n'est pas normal c'est que ça fonctionne. HAVING doit être suivi d'une fonction d'agrégation ou colonne de regroupement. Je pense que si ça fonctionne c'est simplement grâce aux données... j'avoue que je ne vois pas bien pourquoi mais c'est selon moi la seule explication plausible.

    Essaye cette requête sur une base où ta requête fonctionne :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    select object_id , (SELECT COUNT(*) FROM user_objects HAVING object_id < 5)
    from user_objects
    where rownum < 10
    Faudrait analyser les plan d'exécution aussi pour voir si y'a pas un regroupement qui n'est pas fait dans le même ordre

    Pour info : http://www.dba-oracle.com/t_sql_having_clause.htm

    Après j'vois pas bien l'intérêt de se torturer l'esprit à comprendre pourquoi Oracle accepte de temps en temps d'exécuter une syntaxe incorrecte

  10. #10
    Membre du Club
    Inscrit en
    Novembre 2006
    Messages
    113
    Détails du profil
    Informations forums :
    Inscription : Novembre 2006
    Messages : 113
    Points : 65
    Points
    65
    Par défaut
    J'ai exécuté la requête et ça marche pas là où ma requête fonctionne, elle me donne :

    ORA-00979 n'est pas une expression GROUP BY

    c'est la même erreur que j'ai sur l'environnement client pour ma requête

    Pour les données, j'ai reproduit exactement les mêmes données sur une base en interne pour vérifier et le problème n'est pas apparu en interne

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

    Informations forums :
    Inscription : Janvier 2004
    Messages : 15 967
    Points : 19 075
    Points
    19 075
    Par défaut
    l'ordre compte peut-être... et les plans d'exécutions ?

Discussions similaires

  1. [2008] creation de compte sur une base snapshot à parir d'une base en mirroring.
    Par scazikiss dans le forum Réplications
    Réponses: 1
    Dernier message: 21/05/2013, 17h00
  2. Réponses: 3
    Dernier message: 22/10/2008, 17h55
  3. Réponses: 6
    Dernier message: 30/05/2008, 17h03
  4. Réponses: 0
    Dernier message: 03/04/2008, 15h14
  5. Maj d'une base 7.0 vers une base 2000
    Par ditter dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 23/11/2005, 17h05

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