|
Publicité ' | |||||||||||||||||||||||
|
|
#1 | ||
|
Invité régulier
![]() Inscription : août 2004 Messages : 61 ![]() |
Bonjour,
voici ma procédure stockée : Code :
Maintenant comment faire pour que :AI_input ne soit plus une valeur unique, mais une liste de valeur. Je pensais changer mon en mais il faut que AI_input soit une liste d'élement de type integer, ou un tableau. Une idée, un conseil ? merci d'avance Benoît[/quote] |
||
|
|
00
|
|
|
#2 | ||
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Il n'y a hélas pas de solution simple :
Soit vous etes sous FB1.5 dans ce cas vous pouvez exécuter une requete dynamique (moins performant qu'une requete préparée). Soit vous savez que vous n'aurez jamais plus de n possibilitées dans ce cas vous pouvez définir n paramètres d'entrée de type integer Code :
puis Code :
WHERE A1 IN (:AI_input1, :AI_input2, :AI_input3, :AI_input4) Si cette liste n'est pas retrouvable via un select alors vous pouvez créer une table spéciale qui vous servira pour enregistrer ces listes. Vous utilisez un générateur pour optenir un identifiant et utilisez cet identifiant pour tous les A1 de cette liste (c'est pour éviter de mélanger les listes entre différents utilisateurs) Avant d'appeler la PS vous inserez donc vos A1 en utilisant le même ID. Puis en entrée vous avez ID_PARAMETRE qui vous permet de retrouver la liste des A1 que vous avez préalablement inséré dans la table spéciale. ensuite il ne vous reste plus qu'a faire : Code :
WHERE A1 IN (SELECT A1 FROM TABLE_PARAMETRE_SPECIALE WHERE ID=:ID_PARAMETRE) |
||
|
|
00
|
|
|
#3 | |
|
Invité régulier
![]() Inscription : août 2004 Messages : 61 ![]() |
Citation:
[/quote] |
|
|
|
00
|
|
|
#4 | ||
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
C'est une des nouveautés de FB1.5. Mais c'est la solution la plus risquée des 3.
Celà consiste à construire l'ordre SELECT dans une variable de type chaine et à la faire interpréter par FB (EXECUTE STATEMENT <string>;) Celà veux dire que votre PS ne sera pas optimisé, et si vous vous trompez lors de la création de votre chaine vous planterez votre PS. Il vous faudra en plus que vous contruisiez une chaine en paramètre d'entrée de type VARCHAR() avant d'appeler votre PS. Cette chaine devra être constituée des valeurs sous forme texte. "1, 2, 12, 100" par exemple ce qui n'est pas forcément le plus simple. De plus celà veux dire que cette liste est forcément limitée (à la longueur max que vous aurez défini pour le varchar()) puis dans votre PS Code :
|
||
|
|
00
|
|
|
#5 |
|
Invité régulier
![]() Inscription : août 2004 Messages : 61 ![]() |
Super, merci.
Je vais tenter cette option. Ma chaîne A1_INPUT étant créée par un script php, elle sera 'blindée' avant l'appel de la PS. |
|
|
00
|
|
|
#6 |
|
Invité régulier
![]() Inscription : août 2004 Messages : 61 ![]() |
Il semble que cette fonction soit spécifique à FB1.5. Où puis je trouver la documentation de ce SGBD ?
Pour le moment je ne possède que la doc de Interbase 6... Merci Benoît |
|
|
00
|
|
|
#7 |
|
Membre Expert
![]() Frédéric Inscription : octobre 2002 Messages : 1 722 ![]() |
Oui c'est une des nouveautées de FB1.5
La doc de IB6 restant valable pour FB1.5 elle reste la doc de référence. Pour les nouveautées il suffit de regarder dans le répertoire DOC sous FB1.5 |
|
|
00
|
|
|
#8 |
|
Invité régulier
![]() Inscription : août 2004 Messages : 61 ![]() |
J'aurais du y penser ... Merci Benoît |
|
|
00
|
Copyright © 2000-2012 - www.developpez.com