首頁  >  問答  >  主體

將標題重寫為:將整數數組傳遞給MySQL儲存過程

我想建立一個儲存過程,它接收整數陣列和一些其他輸入,例如:

CREATE PROCEDURE test (field1 varchar(4), field2 varchar(4), array varchar (255))

在儲存過程中我想像這樣使用它:

...
WHERE some_field IN (array)
...

問題是,透過這種方式,我只能得到與陣列中第一個整數相對應的行。

有什麼方法可以讓它工作(我也嘗試使用 FIND_IN_SET 但它的作用與 IN 完全相同)?

我為測試預存程序而進行的呼叫是 CALL test (12, 13, '1, 2, 3')

P粉275883973P粉275883973321 天前578

全部回覆(2)我來回復

  • P粉590428357

    P粉5904283572023-11-04 09:16:19

    沒有陣列概念。所以你能做的可能就是這樣

    您的array變數的值為'1, 2, 3'作為字串

    1. 使用 , 作為分隔符號拆分字串,

    2. 將每個值插入暫存表

    所以你的臨時表會有1,2,3

    #

    最後只需使用您的臨時表即可

    回覆
    0
  • P粉713866425

    P粉7138664252023-11-04 00:46:05

    FIND_IN_SET() 可以工作,但數字字串中不能有空格。

    演示:

    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 |
    +-------------------------+

    因此,您應該在將列表傳遞給過程之前形成不含空格的列表,或者在過程中使用 REPLACE() 去除空格。

    回覆
    0
  • 取消回覆