bill.fr a écrit :
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.
|
je peux peut-être aiguiller un peu
Code :
- FUNCTION essai(ma_liste varchar2) RETURN BOOLEAN IS
- lgr number; --la longueur de la liste
- elem varchar2(20); --l'élément de la liste que l'on va tester
- nb number; --le nombre de réponses pour cet élément
- nb_ok number := 0; --le nombre d'éléments qui sont ok
- nb_elem number := 0; --le nombre d'éléments total
- pos_deb number := 1; --position de curseur
- pos_fin number := 2; --
- BEGIN
- lgr := length(ma_liste);
- while pos_deb <= lgr loop
- if substr(ma_liste, pos_deb, 1) = '''' then
- pos_fin := pos_deb+1;
- while pos_fin <= lgr loop
- if substr(ma_liste, pos_fin, 1) = '''' then
- elem := substr(ma_liste,pos_deb+1, pos_fin-pos_deb-1);
- select count(*) into nb from login where login = chr(39)||elem||chr(39);
- message(elem||':'||nb);
- pos_deb := pos_fin+2;
- pos_fin := pos_deb+1;
- end if;
- pos_fin :=pos_fin +1;
- end loop;
- end if;
- pos_deb := pos_deb +1;
- end loop;
- if nb_elem = nb_ok then
- return true;
- else
- return false;
- end if;
- END;
|
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...
Message édité par dalcap le 15-01-2004 à 12:36:46