recherche

Maison  >  Questions et réponses  >  le corps du texte

Réécrivez le titre comme suit : Passer un tableau d'entiers à la procédure stockée MySQL

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粉275883973P粉275883973392 Il y a quelques jours652

répondre à tous(2)je répondrai

  • P粉590428357

    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

    1. Divisez la chaîne en utilisant , comme délimiteur,

    2. 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

    répondre
    0
  • P粉713866425

    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.

    répondre
    0
  • Annulerrépondre