Précédent   Forum des professionnels en informatique > Bases de données > Oracle
Oracle Forum Oracle : le serveur, les outils, ... Voir F.A.Q Oracle Tutoriels Oracle
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 08/01/2007, 11h09   #1
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
Par défaut Utiliser une liste de valeur dans un select

Bonjour,

Je souhaite faire une requete sur une liste de valeurs :
Code :
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 :
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 ?
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 11h15   #2
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Code :
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 :
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
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 11h19   #3
Invité de passage
 
Inscription : juillet 2004
Messages : 10
Détails du profil
Informations forums :
Inscription : juillet 2004
Messages : 10
Points : 4
Points : 4
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
Nary est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 11h25   #4
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
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 ...
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 11h27   #5
Membre éclairé
 
Inscription : 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 : 367
Points : 367
as tu regardé du côté de ceci :

Code :
1
2
3
... WHERE NOT EXISTS IN ( SELECT rowid FROM ...
 
.... WHERE NOT IN (val1, val2 ,etc ...)

CDLT.
taska est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 12h28   #6
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
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".
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 14h12   #7
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
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 :
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 :
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
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 14h47   #8
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
Quelle version Oracle ?
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 08/01/2007, 17h30   #9
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
ç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 ?
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2007, 09h56   #10
McM
Expert Confirmé Sénior
 
Inscription : juillet 2003
Messages : 3 450
Détails du profil
Informations forums :
Inscription : juillet 2003
Messages : 3 450
Points : 4 209
Points : 4 209
le code que tu as mis : Oui, mais sous TOAD.
Sous sqlplus 8.0 il m'accepte pas le WITH

Code :
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
Citation:
"OBJECT_NAME"
"OBS"
"PROJECT"
"PROJWBS"
McM est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2007, 10h18   #11
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
il ne faut mettre qu'un seul alias je pense :
Code :
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 ;-)

Citation:
OBJECT_
-------
OBS
PROJECT
PROJWBS
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2007, 10h49   #12
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
Bon ben chez moi je fais

Code :
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 :
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
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2007, 11h16   #13
Rédacteur/Modérateur
 
Avatar de orafrance
 
Inscription : janvier 2004
Messages : 15 861
Détails du profil
Informations personnelles :
Âge : 35

Informations forums :
Inscription : janvier 2004
Messages : 15 861
Points : 16 212
Points : 16 212
sans la version d'Oracle j'vois mal comment t'aider
orafrance est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2007, 11h33   #14
in
Membre Expert
 
Avatar de in
 
Inscription : avril 2003
Messages : 1 609
Détails du profil
Informations personnelles :
Localisation : France, Finistère (Bretagne)

Informations forums :
Inscription : avril 2003
Messages : 1 609
Points : 1 564
Points : 1 564
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
__________________
"If email had been around before the telephone was invented, people would have said, 'Hey, forget email! With this new telephone invention I can actually talk to people!"

Besoin d'une nouvelle méthode pour développer ? -> http://www.la-rache.com/
in est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité Cette discussion est résolue.
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h33.


 
 
 
 
Partenaires

Hébergement Web