Maison > Questions et réponses > le corps du texte
Je souhaite créer une procédure stockée qui reçoit un tableau d'entiers et d'autres entrées comme :
CREATE PROCEDURE test (field1 varchar(4), field2 varchar(4), array varchar (255))
Dans la procédure stockée, je souhaite l'utiliser comme ceci :
... WHERE some_field IN (array) ...
Le problème est que de cette façon, je n'obtiens que les lignes correspondant au premier entier du tableau.
Y a-t-il un moyen de le faire fonctionner (j'ai aussi essayé d'utiliser FIND_IN_SET
但它的作用与 IN
exactement de la même manière) ?
L'appel que j'ai passé pour tester la procédure stockée était CALL test (12, 13, '1, 2, 3')
.
P粉5904283572023-11-04 09:16:19
Il n'y a pas de notion de tableau. C'est donc probablement ce que vous pouvez faire
Votre array
变量的值为'1, 2, 3'
comme ficelle
Divisez la chaîne en utilisant ,
comme délimiteur,
Insérez chaque valeur dans une table temporaire
Votre table temporaire aura donc 1,2,3
En fin de compte, utilisez simplement votre table temporaire
P粉7138664252023-11-04 00:46:05
FIND_IN_SET() fonctionne, mais vous ne pouvez pas avoir d'espaces dans la chaîne numérique.
Démo :
mysql> select find_in_set(2, '1, 2, 3'); +---------------------------+ | find_in_set(2, '1, 2, 3') | +---------------------------+ | 0 | +---------------------------+ mysql> select find_in_set(2, '1,2,3'); +-------------------------+ | find_in_set(2, '1,2,3') | +-------------------------+ | 2 | +-------------------------+
Vous devez donc former la liste sans espaces avant de la transmettre à la procédure, ou utiliser REPLACE() dans la procédure pour supprimer les espaces.