Aide pour l'écriture d'une requete SQL - SQL/NoSQL - Programmation
Marsh Posté le 14-01-2004 à 16:10:35
vttman2 a écrit : quel sgbd ? |
Base oracle 9.2.0.3
Exécution des requetes via une connexion sqlplus standard.
quel rapport avec requete ??
Marsh Posté le 14-01-2004 à 16:52:22
c pour savoir
de quelle fonction SQL on(je) dispose pour résoudre
ton blème : decode, exist ou case, iif ...
Marsh Posté le 14-01-2004 à 16:57:26
vttman2 a écrit : c pour savoir |
eeeeeeeeet .... ??
il n'est pas possible d'écrire une condition qui dirait "toutes les valeurs de la liste existent dans ce champ de cette table de la BDD" ??
Marsh Posté le 14-01-2004 à 17:04:51
J'm casse à l'instant ...
si d'ici demain t'as rien trouvé, ou pas de réponse
on regarde à nouveau !
Bye ;-)
Marsh Posté le 14-01-2004 à 17:38:21
En gros tu veux que ça te retourne OK si toutes les valeurs de la liste sont dans la table ?
Marsh Posté le 14-01-2004 à 17:53:04
A part par une fonction, je vois pas autrement que :
select count(distinct(champ)) from table where champ in (liste) et tu vérifies que le compte égale le nombre d'éléments dans la liste...
Sinon faut faire une fonction mais je n'ai jamais passé de liste de taille variable en paramètre, donc faut que je cherche ou que quelqu'un aiguille un peu.
Marsh Posté le 14-01-2004 à 19:08:19
bill.fr a écrit : A part par une fonction, je vois pas autrement que : |
je peux peut-être aiguiller un peu
Code :
|
sur le principe, il faut parcourir une liste telle que :
'NOM1','NOM2','NOM3' par exemple ?
tu as donc 2 variables pour te sortir
NOM1
NOM2
NOM3
d'où la double boucle...
bon, pour les positions, je me suis un peu embrouillé, mais sur le principe, cela devrait être bon...
Marsh Posté le 14-01-2004 à 19:40:24
Question bête...
En plus de la liste, est-ce que tu peux passer à la requête le nombre d'éléments de la liste ? A ce moment, ça se fait tout seul.
select decode(count(distinct champ), nbElements, 'OK', null) as res from table where champ in (liste)
Ca doit marcher.
Le problème des SGBD, c'est de retrouver le nombre d'éléments d'une liste. A partir du moment où on peut pallier à ce problème...
Edit :
- En gras : les paramètres
- En italique : le nom de tes objets
Marsh Posté le 14-01-2004 à 21:21:57
clap clap je pensais plsu au décode
Marsh Posté le 15-01-2004 à 10:59:26
MagicBuzz a écrit : Question bête... |
ça me parait pas mal ça ... suffit alors que je sorte le nombre d'éléments de la liste dans le programme appelant, par un awk, par exemple, et puis de le passer en paramètres, et le tour est joué...
Merci à tous.
juan
Marsh Posté le 15-01-2004 à 11:04:39
Je viens de vérifier sous Oracle 8.je_sais_pas_combien
Et ça marche bien :
select decode(count(distinct codref), 4, 'OK', null) as res
from tblref
where codref in ('UNP', 'LOS', 'WON', 'DUP')
and codtbl = 'TDRRES'
(à noter un filtre supplémentaire sur le champ 'codtbl', qui n'a rien à voir avec la requête initiale, c'est juste que sinon j'ai un peu plus de 800 000 lignes et je la sentais pas en "not in"
Marsh Posté le 14-01-2004 à 15:34:57
Je dois rédiger une requete SQL, mais là mes maigres connaissances en la matière risquent d'être insuffisantes :
L'idée de la requete est la suivante :
Select 'OK' from TABLE where CHAMP DE LA TABLE in (LISTE DE VALEUR)
La liste de valeur est transmise en variable lors de l'appel de la requete.
ça, c'est simple. Là où le problème se corse, c'est que je voudrais que le OK soit retourné seulement si toutes les valeurs de la liste sont présentes dans la table ...
Si une seule des valeurs manque -> rien n'est retourné.
C'est plutôt urgent. Merci pour le coup de main