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

Langage SQL Discussion :

Commande AS et clause WHERE


Sujet :

Langage SQL

  1. #1
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 89
    Points
    89
    Par défaut Commande AS et clause WHERE
    Bonjour à tous,

    Je voudrais savoir si un alias peut être insérer dans une clause WHERE.
    Voici ma requête.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    select d.GLA_ID, d.OPCD_ID, d.CIC_ID as CIC_ID_DESC, d.LANGUAGE, d.DESCRIPTION, d.SHORT_DESCRIPTION, g.CIC_ID as gcic
                	from NMS_DESCRIPTIONS d, NMS_GL_ACCOUNTS g
                    where d.GLA_ID = g.GLA_ID
                    AND ((CIC_ID_DESC=0)
                    OR (d.GLA_ID in (select GLA_ID from NMS_GL_ACCOUNTS where CIC_ID IS NOT NULL)))
    et la commande
    n'est pas du tous appréciée par le logociel SQL.

    Le message d'erreur est le suivant
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    13:42:32  ORA-00904: "DESC_CIC_ID": invalid identifier
    Merci d'avance

  2. #2
    Expert confirmé Avatar de Cybher
    Homme Profil pro
    Consultant réseaux et sécurité
    Inscrit en
    Mai 2005
    Messages
    3 281
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Consultant réseaux et sécurité
    Secteur : Conseil

    Informations forums :
    Inscription : Mai 2005
    Messages : 3 281
    Points : 4 644
    Points
    4 644
    Par défaut
    salut,

    on n'utilise pas d'alias dans le where pour les noms de colonnes

  3. #3
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    Salut,

    Pourquoi ne mets-tu pas tout simplement le nom de ton attribut ?
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT d.GLA_ID, d.OPCD_ID, d.CIC_ID AS CIC_ID_DESC, d.LANGUAGE, d.DESCRIPTION, d.SHORT_DESCRIPTION, g.CIC_ID AS gcic
    FROM NMS_DESCRIPTIONS d, NMS_GL_ACCOUNTS g
    WHERE d.GLA_ID = g.GLA_ID
    AND ((d.CIC_ID=0) OR (d.GLA_ID IN (SELECT GLA_ID 
                                       FROM NMS_GL_ACCOUNTS 
                                       WHERE CIC_ID IS NOT NULL)))

  4. #4
    Membre régulier
    Inscrit en
    Décembre 2006
    Messages
    196
    Détails du profil
    Informations forums :
    Inscription : Décembre 2006
    Messages : 196
    Points : 89
    Points
    89
    Par défaut
    Je pourrais mettre le nom de colonne mais vous n'avez qu'une partie du code, donc voici le code 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
     
    declare 
    cont integer;
     
    BEGIN
     
    FOR cur_row IN (select d.GLA_ID, d.OPCD_ID, d.CIC_ID as CIC_ID_DESC, d.LANGUAGE, d.DESCRIPTION, d.SHORT_DESCRIPTION, g.CIC_ID as CIC_ID_ACCOUNT
                	from NMS_DESCRIPTIONS d, NMS_GL_ACCOUNTS g
                    where d.GLA_ID = g.GLA_ID
                    AND ((d.CIC_ID=0)
                    OR (d.GLA_ID in (select GLA_ID from NMS_GL_ACCOUNTS where CIC_ID IS NOT NULL)))
    		      )
    LOOP
     
    SELECT count(*) into cont FROM nms_descriptions a where a.GLA_ID=cur_row.GLA_ID AND a.language=cur_row.LANGUAGE;
     
    IF (cont > 1)
    THEN
        DELETE FROM nms.nms_descriptions dd WHERE dd.GLA_ID=cur_row.GLA_ID, dd.OPCD_ID=cur_row.OPCD_ID, dd.CIC_ID=cur_row.CIC_ID_DESC, dd.LANGUAGE=cur_row.LANGUAGE;
    ELSE     
        UPDATE nms.nms_descriptions ud SET cic_id=cur_row.CIC_ID_ACCOUNT WHERE ud.GLA_ID=cur_row.GLA_ID, ud.OPCD_ID=cur_row.OPCD_ID, ud.CIC_ID=cur_row.CIC_ID_DESC, ud.LANGUAGE=cur_row.LANGUAGE;
    END IF;
     
    END LOOP;
     
    END;
    comme vous pouvez le voir c'est une PL et je pense que le pb vient de l'alias car j'ai l'erreur suivante

    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
     
    14:25:38  
    14:25:38  *** SCRIPT START :  Session:NMS@LONPRODH(2)   24/10/2008 14:25:38 *** 
    14:25:38  Start SQL Editor Execution ...
    14:25:39  Processing ...
    14:25:39      DELETE FROM nms.nms_descriptions dd WHERE dd.GLA_ID=cur_row.GLA_ID, dd.OPCD_ID=cur_row.OPCD_ID, dd.CIC_ID=cur_row.DESC_CIC_ID, dd.LANGUAGE=cur_row.LANGUAGE;
    14:25:39                                                                         *
    14:25:39  ORA-06550: line 18, column 71:
    14:25:39  PL/SQL: ORA-00933: SQL command not properly ended
    14:25:39  ORA-06550: line 18, column 5:
    14:25:39  PL/SQL: SQL Statement ignored
    14:25:39  ORA-06550: line 20, column 90:
    14:25:39  PL/SQL: ORA-00933: SQL command not properly ended
    14:25:39  ORA-06550: line 20, column 5:
    14:25:39  PL/SQL: SQL Statement ignored
    14:25:39  *** Script stopped due to error ***
    14:25:39  *** SCRIPT END :  Session:NMS@LONPRODH(2)   24/10/2008 14:25:38 *** 
    14:25:39  End SQL Editor Execution
    Merci

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

    Informations forums :
    Inscription : Août 2008
    Messages : 2 950
    Points : 5 849
    Points
    5 849
    Par défaut
    Salut,

    Il faut mettre des AND et pas des virgules.

  6. #6
    Membre averti Avatar de AL1986
    Profil pro
    Inscrit en
    Juillet 2007
    Messages
    434
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : France

    Informations forums :
    Inscription : Juillet 2007
    Messages : 434
    Points : 441
    Points
    441
    Par défaut
    D'après ton erreur c'est la virgule de ta requête DELETE qui pose problème, ce qui est normal car dans WHERE il n y a pas de virgules mais des AND et/ou des OR et c'est pareil pour ta requête UPDATE. A priori si tu remplaces les virgules dans le WHERE par des AND, ça devrait fonctionner
    Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    IF (cont > 1)
    THEN
        DELETE FROM nms.nms_descriptions dd WHERE dd.GLA_ID=cur_row.GLA_ID AND dd.OPCD_ID=cur_row.OPCD_ID AND dd.CIC_ID=cur_row.CIC_ID_DESC AND dd.LANGUAGE=cur_row.LANGUAGE;
    ELSE     
        UPDATE nms.nms_descriptions ud SET cic_id=cur_row.CIC_ID_ACCOUNT WHERE ud.GLA_ID=cur_row.GLA_ID AND ud.OPCD_ID=cur_row.OPCD_ID AND ud.CIC_ID=cur_row.CIC_ID_DESC AND ud.LANGUAGE=cur_row.LANGUAGE;
    END IF;

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

Discussions similaires

  1. [super requete] Dumper un model avec une clause where
    Par elievar dans le forum Langage SQL
    Réponses: 3
    Dernier message: 16/03/2005, 17h05
  2. Ordre des tests dans la clause WHERE
    Par Tans98 dans le forum Langage SQL
    Réponses: 6
    Dernier message: 22/09/2004, 10h52
  3. Problème clause WHERE
    Par nesbla dans le forum Langage SQL
    Réponses: 3
    Dernier message: 11/06/2004, 15h07
  4. probleme avec le caractere 'Z' dans ma clause WHERE
    Par dibox dans le forum MS SQL Server
    Réponses: 2
    Dernier message: 01/04/2004, 12h21
  5. [ character en simple cote ] clause Where
    Par hocinema dans le forum DB2
    Réponses: 3
    Dernier message: 20/02/2004, 10h17

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