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 :

Erreur ORA-00904 : invalid identifier


Sujet :

SQL Oracle

  1. #1
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut Erreur ORA-00904 : invalid identifier
    bonjour, qui peut trouver l'erreur dans cette requette
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SQL> SELECT DISTINCT cen_benef,substr(DECODE(substr(CEN_BENEF,1,4),'0004','0000'||substr(CEN_BENEF,5,length(CEN_BENEF)),'000' || SUBSTR (cen_benef, 8, LENGTH (cen_benef))|| '0000'),1,9) subId_local,DECODE(substr(CEN_BENEF,1,4),'0004','0000'||substr(CEN_BENEF,5,length(CEN_BENEF)),'000' || SUBSTR (cen_benef, 8, LENGTH (cen_benef))|| '0000') int_ide_benef,cen_code_naf
      2      FROM centralisations
      3      WHERE cen_mois BETWEEN TO_DATE ('01/11/2007', 'DD/MM/YYYY')
      4      AND TO_DATE ('01/12/2008','DD/MM/YYYY')
      5      AND cen_indiv = 1
      6      group by subId_local,int_ide_benef,cen_code_naf;
        group by subId_local,int_ide_benef,cen_code_naf
                             *
    ERREUR à la ligne 6 :
    ORA-00904: "INT_IDE_BENEF": invalid identifier
    Merci pour votre aide

  2. #2
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Points : 350
    Points
    350
    Par défaut
    EDIT : on ne peut pas utiliser les alias dans le GROUP BY à ce que j'ai lu en cherchant un peu.

  3. #3
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par madevilts Voir le message
    EDIT : on ne peut pas utiliser les alias dans le GROUP BY à ce que j'ai lu en cherchant un peu.
    Merci, c'est vrai alors si je voudrai regrouper mes requette ci-dessus que je doit faire.

  4. #4
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Points : 350
    Points
    350
    Par défaut
    Petite question qui me saute aux yeux... a quoi te sert ton GROUP BY ?

    Je ne vois pas de COUNT, MAX, MIN, SUM, AVG... ni de clause HAVING... donc normalement, le GROUP BY ne te sert à rien en tant que tel !

  5. #5
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Et puis un distinct avec un group by c'est absurde.

    Ensuite cen_benef n'est pas dans le group by..

    enfin, le substr prend jusqu'à la fin par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    SUBSTR(CEN_BENEF,5,LENGTH(CEN_BENEF))
    =
    SUBSTR(CEN_BENEF,5)

  6. #6
    Invité
    Invité(e)
    Par défaut
    moi ce qui me choque c'est un distinct avec un group by...

  7. #7
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Preums !!

  8. #8
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Le code donne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT DISTINCT cen_benef, cen_code_naf, 
                SUBSTR(DECODE(SUBSTR(cen_benef,1,4),'0004',
                            '0000'|| SUBSTR(cen_benef,5),
                            '000' || SUBSTR(cen_benef,8) ||'0000'),1,9) subid_local,
                DECODE(SUBSTR(cen_benef,1,4),'0004',
                            '0000'|| SUBSTR(cen_benef,5),
                            '000' || SUBSTR(cen_benef,8) ||'0000') int_ide_benef
            FROM CENTRALISATIONS
            WHERE cen_mois BETWEEN TO_DATE ('01/11/2007', 'DD/MM/YYYY') AND TO_DATE ('01/12/2008','DD/MM/YYYY')
            AND cen_indiv = 1
    Ou
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    SELECT  cen_benef, cen_code_naf, SUBSTR(int_ide_benef,1,9) subid_local,int_ide_benef
    FROM (
            SELECT DISTINCT cen_benef, cen_code_naf, 
                DECODE(SUBSTR(cen_benef,1,4),'0004',
                            '0000'|| SUBSTR(cen_benef,5),
                            '000' || SUBSTR(cen_benef,8) ||'0000') int_ide_benef
            FROM CENTRALISATIONS
            WHERE cen_mois BETWEEN TO_DATE ('01/11/2007', 'DD/MM/YYYY') AND TO_DATE ('01/12/2008','DD/MM/YYYY')
            AND cen_indiv = 1
          )

  9. #9
    Membre averti
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Février 2007
    Messages
    340
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Transports

    Informations forums :
    Inscription : Février 2007
    Messages : 340
    Points : 350
    Points
    350
    Par défaut
    Pourquoi pas ?

    Techniquement parlant, un GROUP BY n'est pas incompatible avec le DISTINCT non ?

    Imaginons :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    Table CLASSE :
    GROUPE       NOTE
    -----------------
    1              1
    1              2
    2              1
    2              2
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT COUNT(GROUPE) CPT,MAX(NOTE) MAXNOTE FROM CLASSE GROUP BY GROUPE
    Retournerai
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    CPT MAXNOTE
    ------------
    2       2
    2       2
    Soit avec un DISTINCT en plus
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    SELECT DISTINCT COUNT(GROUPE) CPT,MAX(NOTE) MAXNOTE FROM CLASSE GROUP BY GROUPE
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    CPT MAXNOTE
    --------------
    2       2
    Conclusion : GROUP BY vs GROUP BY + DISTINCT retourne des résultats différents

    Testé sous Oracle 10.2g

  10. #10
    McM
    McM est déconnecté
    Expert éminent

    Homme Profil pro
    Développeur Oracle
    Inscrit en
    Juillet 2003
    Messages
    4 580
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Oracle

    Informations forums :
    Inscription : Juillet 2003
    Messages : 4 580
    Points : 7 740
    Points
    7 740
    Billets dans le blog
    4
    Par défaut
    Oui, parce que tu groupes sur une colonne non sélectionnée.

  11. #11
    Membre régulier Avatar de Sabact
    Inscrit en
    Septembre 2006
    Messages
    189
    Détails du profil
    Informations forums :
    Inscription : Septembre 2006
    Messages : 189
    Points : 91
    Points
    91
    Par défaut
    Citation Envoyé par Jerome_Mtl Voir le message
    moi ce qui me choque c'est un distinct avec un group by...
    Réponses plus bas.

Discussions similaires

  1. ORA-00904: invalid identifier
    Par DeveloppeurWeb dans le forum PL/SQL
    Réponses: 4
    Dernier message: 18/02/2013, 09h38
  2. ORA-00904 invalid identifier pour un update
    Par sassmine82 dans le forum PL/SQL
    Réponses: 10
    Dernier message: 08/06/2010, 16h34
  3. ORA-00904: invalid identifier sur le last query
    Par decksroy dans le forum Forms
    Réponses: 4
    Dernier message: 24/01/2008, 12h03
  4. [Debutant] Erreur ORA-00904
    Par gloglo dans le forum Oracle
    Réponses: 6
    Dernier message: 13/10/2006, 10h04
  5. Réponses: 4
    Dernier message: 25/01/2006, 18h25

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