|
Publicité ' | |||||||||||||||||||||||
|
|
#1 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 302 ![]() |
Bonjour,
j'ai une fonction qui prend en paramètre un entier (correspondant à l'id d'une table) me retourne un varchar du type : (qui sont en fait les id d'une table séparés par une virgule Le problème est lorsque j'exécute cette requete : Code :
SELECT * FROM matable WHERE id IN (SELECT mafonction(x)); Code :
SELECT * FROM matable WHERE id IN (1,2,3); Est-ce du au retour de ma fonction qui est un varchar ?? Merci d'avance
__________________
L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent Pierre Desproges |
|
|
00
|
|
|
#2 |
|
Membre du Club
![]() |
bonjour...
je pense que le pbm vient peut être de la fonction. essaye de mettre le corps de ta fonction pour qu'on voit mieux. cordialement. |
|
|
00
|
|
|
#3 | |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
Bonjour,
Citation:
Ta fonction doit retourner un jeu d'enregistrement comportant un seul champ de type entier ; en d'autres termes, ta fonction doit retourner un SETOF int4.
__________________
FAQ XML ------------ « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser » Giacomo Leopardi |
|
|
|
00
|
|
|
#4 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 302 ![]() |
en fait j'ai donné cet exemple pour simplifier mais la fonction citée appelle 2 autres fonctions qui sont assez compliquées si tu n'as pas le modèle de ma base de données en tête (qui est très lourd).
Donc je suis en train d'essayer une autre méthode qui me confirmera si cela vient du retour en varchar ou du retour de ma fonction qui n'est pas bon. Je vous tiendrai au courant mais si quelqu'un a déjà eu le même type de souci je suis preneur.
__________________
L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent Pierre Desproges |
|
|
00
|
|
|
#5 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 302 ![]() |
Bon alors conclusion finale.
J'ai réussi grace à ma méthode : en fait je découpe ma chaine de caractère et je stocke tous mes élèments dans un tableau d'entiers. GrandFather : je ne connaissais pas le SETOF mais si j'ai bien compris c'est plus ou moins ce que je fais ? Si j'ai compris les docs que j'ai lu, SETOF int4 renvoit un tableau d'entiers ? Je n'ai pas utilisé cette méthode car j'étais déjà parti sur mon autre méthode et que repartir sur un SETOF impliquait de changer d'autres fonctions qui étaient appelées par ma fonction mais par la suite ça peut bien m'aider. Merci
__________________
L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent Pierre Desproges |
|
|
00
|
|
|
#6 | |
|
Expert Confirmé Sénior
![]() ![]() Inscription : mai 2004 Messages : 4 490 ![]() |
Citation:
Pour ton problème présent, tu l'as résolu en utilisant une forme de IN qui accepte les valeurs scalaires ; dans ce contexte, c'est plus performant qu'utiliser la version de IN qui prend en paramètre une sous-requête, constituée par une fonction retournant un SETOF.
__________________
FAQ XML ------------ « Le moyen le plus sûr de cacher aux autres les limites de son savoir est de ne jamais les dépasser » Giacomo Leopardi |
|
|
|
00
|
|
|
#7 |
|
Membre confirmé
![]() Inscription : septembre 2003 Messages : 302 ![]() |
merci !!!
comme tu dis ça a l'air bien puissant !!! A+
__________________
L'héroïsme, c'est encore la meilleure façon de devenir célèbre quand on n'a pas de talent Pierre Desproges |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com