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 :

Utiliser une liste de valeur dans un select


Sujet :

Oracle

  1. #1
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut Utiliser une liste de valeur dans un select
    Bonjour,

    Je souhaite faire une requete sur une liste de valeurs :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    WITH bidule AS SELECT ...
    SELECT * FROM bidule WHERE ...
    Seulement, je ne me rappelle plus de la syntaxe du WITH AS SELECT (enfin un truc comme ça) ... et je n'arrive pas à mettre la main dessus, ni sur le site (pourtant c'est ici que je l'avais vue) ni sur google ...

    Ai-je révé ? Qqun aurait il un lien ou alors la syntaxe dans la tete ?

    Sinon, je souhaiterais votre avis sur ma manière de procéder. En fait j'ai une liste de valeurs dont je souhaite connaitre celles qui ne sont pas présentes dans la base.

    En gros je souhaite faire un truc genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    (val1,val2,val3)
    except
    (SELECT val from values)
    Est ce que ma manière est correcte, ou y'a moyen de faire un truc propre ?

  2. #2
    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
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    WITH t AS (SELECT SYSDATE AS dte FROM dual)
    SELECT * FROM t
    Ca marche à partir de la 9i

    Sinon, l'autre moyen pour ton test :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    (SELECT val1 FROM DUAL
    UNION ALL
    SELECT val2 FROM DUAL
    UNION ALL
    SELECT val3 FROM DUAL
    )
    MINUS
    SELECT val
    FROM MATABLE

  3. #3
    Membre à l'essai
    Inscrit en
    Juillet 2004
    Messages
    10
    Détails du profil
    Informations forums :
    Inscription : Juillet 2004
    Messages : 10
    Points : 12
    Points
    12
    Par défaut re
    Slt,
    J'utilise sql sous oracle mais j'ai jamais entendu la syntaxe ci dessus.
    Pourtant j'ai une solution si ça peut arranger les choses :
    créer une table avec une colonne qui va contenir la liste des valeurs puis de faire un select nomColonne from nouvelleTable minus select nomColonne tableBase

  4. #4
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par Nary
    Pourtant j'ai une solution si ça peut arranger les choses :
    créer une table avec une colonne qui va contenir la liste des valeurs puis de faire un select nomColonne from nouvelleTable minus select nomColonne tableBase
    justement, je ne veux pas créer de table ... je l'aurais fais sinon, tu penses bien


    Merci pour la syntaxe du with

    Juste pour info, tu l'a trouvée sur le net ? avec quelle recherche (si c'est pas trop indiscret ) ? parce que franchement, j'ai maté 2 bouquins au boulot, plus une petite 1/2 heure sur le net et j'ai pas pu trouver ...

  5. #5
    Membre averti
    Profil pro
    Inscrit en
    Décembre 2004
    Messages
    349
    Détails du profil
    Informations personnelles :
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations forums :
    Inscription : Décembre 2004
    Messages : 349
    Points : 409
    Points
    409
    Par défaut
    as tu regardé du côté de ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    ... where not exists in ( select rowid from ...
     
    .... where not in (val1, val2 ,etc ...)

    CDLT.

  6. #6
    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
    Pour le WITH, en effet la recherche ne marche pas : Surement car c'est mis entre les balises CODE.
    Un jour sur le forum, quelqu'un a mis ça, et j'ai copié la syntaxe dans mon fichier "fouretout Oracle.sql".

  7. #7
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    en fait, vu que ça marchait pas vraiment, j'ai bidouillé et je viens de me rendre compte que je cherche midi à 14 heures ...

    Il me suffisait de faire

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    SELECT truc FROM
       (
       SELECT 'machin' AS truc FROM dual
       UNION
       SELECT 'bidule' AS truc FROM dual
       )
    MINUS
    SELECT mes_valeurs FROM Matable
    Par contre c'est un peu moche mais le code suivant ne fonctionnait pas :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH liste_table AS ( 
    	 SELECT 'OBS' AS OBJECT_NAME FROM dual
    	 UNION
    	 SELECT 'PROJECT' AS OBJECT_NAME FROM dual
    	 UNION
    	 SELECT 'PROJWBS' AS OBJECT_NAME FROM dual
    )
    SELECT object_name FROM liste_table
    Il me dit : SQL statement doesn't return rows
    Si qqunn voit pourquoi ...

    Note : j'ai essayé avec les NOT IN aussi mais le temps de traitements parait plus long qu'avec le MINUS ...

    Merci à tous

  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
    Quelle version Oracle ?

  9. #9
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    ça c'est une 10g

    mais je vais tester sur une 9i demain pour voir (enfin ce qui ne changera pas mon problème ...)

    ça marche chez vous ?

  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
    le code que tu as mis : Oui, mais sous TOAD.
    Sous sqlplus 8.0 il m'accepte pas le WITH

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH liste_table AS ( 
    	 SELECT 'OBS' AS OBJECT_NAME FROM dual
    	 UNION
    	 SELECT 'PROJECT' AS OBJECT_NAME FROM dual
    	 UNION
    	 SELECT 'PROJWBS' AS OBJECT_NAME FROM dual
    )
    SELECT object_name FROM liste_table
    "OBJECT_NAME"
    "OBS"
    "PROJECT"
    "PROJWBS"

  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
    il ne faut mettre qu'un seul alias je pense :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH liste_table AS ( 
    	 SELECT 'OBS' AS OBJECT_NAME FROM dual
    	 UNION ALL
    	 SELECT 'PROJECT' FROM dual
    	 UNION ALL
    	 SELECT 'PROJWBS' FROM dual
    )
    SELECT object_name FROM liste_table
    et UNION ALL qui évite un tri inutile ;-)

    OBJECT_
    -------
    OBS
    PROJECT
    PROJWBS

  12. #12
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Bon ben chez moi je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    SELECT 'OBS' AS OBJECT_NAME FROM dual 
    	 UNION ALL
    	 SELECT 'PROJECT'  FROM dual 
    	 UNION ALL
    	 SELECT 'PROJWBS'  FROM dual 
    	 UNION ALL ...
    ça c'est ok

    si je fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    WITH liste_table AS ( 
    	 SELECT 'OBS' AS OBJECT_NAME FROM dual 
    	 UNION ALL
    	 SELECT 'PROJECT'  FROM dual 
    	 UNION ALL
    	 SELECT 'PROJWBS'  FROM dual 
    	 UNION ALL ...
    ) SELECT object_name FROM liste_table
    Ca me donne : SQL Statement doesn't return rows.

    Voilà.

    Ptet que ma syntaxe n'est pas bonne ? mais bon vu qu'il execute ... je pige pas trop.

    Enfin bref, puisque mon problème est résolu sans utiliser le WITH, je tagge résolu quand meme.

    Si vous avez une idée sur le WITH ça m'intéresse quand meme ...

    Merci à tous

  13. #13
    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
    sans la version d'Oracle j'vois mal comment t'aider

  14. #14
    in
    in est déconnecté
    Membre expérimenté Avatar de in
    Profil pro
    Inscrit en
    Avril 2003
    Messages
    1 612
    Détails du profil
    Informations personnelles :
    Localisation : France, Finistère (Bretagne)

    Informations forums :
    Inscription : Avril 2003
    Messages : 1 612
    Points : 1 718
    Points
    1 718
    Par défaut
    Citation Envoyé par Fred_D
    sans la version d'Oracle j'vois mal comment t'aider
    Citation Envoyé par in, hier
    ça c'est une 10g
    c'est toujours une 10g

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

Discussions similaires

  1. Utiliser une liste de valeurs dans une sous-requête
    Par sagopa dans le forum Requêtes
    Réponses: 12
    Dernier message: 30/04/2012, 11h08
  2. insérer une liste de valeurs dans une colonne
    Par ecdxml dans le forum SQL
    Réponses: 7
    Dernier message: 16/10/2009, 15h57
  3. Récuperer par POST une liste d'option dans un select
    Par dad72 dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 10/03/2009, 13h36
  4. utiliser une liste comme colonne dans une autre liste
    Par ahmedmido dans le forum SharePoint
    Réponses: 1
    Dernier message: 15/07/2008, 09h42
  5. Réponses: 2
    Dernier message: 29/06/2007, 14h49

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