Autant que je sache, non, c'est pas possible. Alors que Firebird n'ont array type de données, le support est rudimentaire et l'utilisation des tableaux est généralement pas recommandée. Je pense que la solution la plus simple serait de passer le tableau en tant que (séparés par des virgules) de la chaîne et ensuite utiliser le pour exécuter l'instruction déclaration pour obtenir le jeu de résultats, quelque chose comme
createprocedure CITY (INPUT_LIST_ID varchar(1024))
returns(...)asbeginforexecute statement
'select ... from T where ID_CITY IN ('|| INPUT_LIST_ID ||')'into...
do begin
suspend;endend
Cela signifie cependant que la déclaration que vous utilisez pour obtenir le résultat change aussi, au lieu de WHERE vous utilisez le paramètre de la procédure stockée CITY:
SELECT*FROM CITY('1, 2, 12, 45, 75, 45')
Une autre option pour envoyer la liste des paramètres est d'utiliser table temporaire globale. Cela a le pro que vous pouvez envoyer un grand nombre d'Identifiants sans dépasser le maximum permis déclarations de taille, mais il est plus difficile à mettre en place l'appel...
create global temporary table SP_CITY_PARAMS (
id int notnullprimarykey)oncommitdeleterows;createprocedure CITY
returns(...)asbeginforselect...from T where ID_CITY IN(select id from SP_CITY_PARAMS
)into...
do begin
suspend;endend
Je pense qu'il fonctionne, mais j'ai plus de 10000 villes dans ma base de données. Voulez-vous passer? Pourquoi ne pas les rejoindre sur la table contenant ces villes? Pas tous, seulement les enregistrements sélectionnés. Mais un utilisateur peut sélectionner 1 ou 10.000 villes. Envisagez d'utiliser un table temporaire globale, insérer les villes sélectionnées, de se joindre à l'encontre de cela. OK. Je vais l'essayer. Merci!
Si vous utilisez Firebird 1.5 (Il devrait fonctionner sur les versions supérieures), vous pouvez utiliser cette fonction que j'ai fait pour convertir une chaîne en un tableau d'entiers:
Vous pouvez également utiliser quelque chose comme ceci:
Vous devez créer un nouveau Firebird Procédure appelée "GetIntegerList" qui ressemblerait à quelque chose comme ceci:
Remarque, cela a été fait dans Firebird 2.5.2.
OriginalL'auteur DwightM
Autant que je sache, non, c'est pas possible. Alors que Firebird n'ont array type de données, le support est rudimentaire et l'utilisation des tableaux est généralement pas recommandée. Je pense que la solution la plus simple serait de passer le tableau en tant que (séparés par des virgules) de la chaîne et ensuite utiliser le
pour exécuter l'instruction
déclaration pour obtenir le jeu de résultats, quelque chose commeCela signifie cependant que la déclaration que vous utilisez pour obtenir le résultat change aussi, au lieu de
WHERE
vous utilisez le paramètre de la procédure stockéeCITY
:Une autre option pour envoyer la liste des paramètres est d'utiliser table temporaire globale. Cela a le pro que vous pouvez envoyer un grand nombre d'Identifiants sans dépasser le maximum permis déclarations de taille, mais il est plus difficile à mettre en place l'appel...
Voulez-vous passer? Pourquoi ne pas les rejoindre sur la table contenant ces villes?
Pas tous, seulement les enregistrements sélectionnés. Mais un utilisateur peut sélectionner 1 ou 10.000 villes.
Envisagez d'utiliser un table temporaire globale, insérer les villes sélectionnées, de se joindre à l'encontre de cela.
OK. Je vais l'essayer. Merci!
OriginalL'auteur ain
Essayez ceci:
OriginalL'auteur Rosen Nikolov
Si vous utilisez Firebird 1.5 (Il devrait fonctionner sur les versions supérieures), vous pouvez utiliser cette fonction que j'ai fait pour convertir une chaîne en un tableau d'entiers:
Utilisation
select int_value from integer_list('1,2,3,4, 5, 200, 1, 598415, 2')
Sera de retour ce:
OriginalL'auteur Mateus Viccari