2015-05-14 110 views
0

我想傳遞一個整數數組作爲存儲過程的參數,這怎麼辦呢?使用整數數組作爲參數調用存儲過程?

CREATE PROCEDURE rd22(unitList INT) 
BEGIN 
    SELECT * FROM abet INNER JOIN a ON a.id = abet.alarm_source 
    AND a.unit IN (unitList) 
    WHERE abet.begin_timestamp = 1395874800000; 
END 

這是存儲過程的樣子,我想才達到這樣的事:

SET @val = [1,2,3]; 
CALL rd22(@val); 

一個我能想到的辦法是通過一個字符串,然後以某種方式將其轉換爲整數。是否有任何其他微妙的方式來實現這一點。

謝謝你的時間。

乾杯。

回答

1

你不能做到這樣,當你通過帕拉姆,查詢中逗號分隔字符串在執行in clause它只會採取的第一個值,你需要使用動態查詢與事先準備好的聲明

CREATE PROCEDURE rd22(unitList varchar(100)) 
BEGIN 
    set @ul = unitList; 
    set @qry = concat("select * from abet INNER JOIN a ON a.id = abet.alarm_source and a.unit IN(",@ul,") WHERE abet.begin_timestamp = 1395874800000");  
    prepare stmt from @qry; 
    execute stmt;  
END 

電話會議將作爲

SET @val = '1,2,3'; 
CALL rd22(@val); 

下面是測試情況在MySQL

mysql> select * from test ; 
+------+---------------------+---------------------+----------+ 
| id | created    | resolved   | status | 
+------+---------------------+---------------------+----------+ 
| 1 | 2015-05-10 00:00:00 | 1970-01-01 00:00:00 | open  | 
| 2 | 2015-05-10 00:00:00 | 1970-01-01 00:00:00 | new  | 
| 3 | 2015-05-10 00:00:00 | 2015-05-12 00:00:00 | resolved | 
| 4 | 2015-05-11 00:00:00 | 1970-01-01 00:00:00 | open  | 
| 5 | 2015-05-11 00:00:00 | 1970-01-01 00:00:00 | new  | 
| 6 | 2015-05-11 00:00:00 | 2015-05-11 00:00:00 | resolved | 
| 7 | 2015-05-12 00:00:00 | 1970-01-01 00:00:00 | open  | 
| 8 | 2015-05-12 00:00:00 | 1970-01-01 00:00:00 | new  | 
| 9 | 2015-05-12 00:00:00 | 1970-01-01 00:00:00 | open  | 
+------+---------------------+---------------------+----------+ 
9 rows in set (0.00 sec) 


mysql> delimiter // 
mysql> CREATE PROCEDURE testin(vals varchar(100)) 
    -> BEGIN 
    ->  set @ul = vals; 
    ->  set @qry = concat("select * from test where id IN(",@ul,")");  
    ->  prepare stmt from @qry; 
    ->  execute stmt;  
    -> END;// 
Query OK, 0 rows affected (0.03 sec) 

mysql> set @val = '3,4,6'; 
Query OK, 0 rows affected (0.00 sec) 

mysql> call testin(@val); 
+------+---------------------+---------------------+----------+ 
| id | created    | resolved   | status | 
+------+---------------------+---------------------+----------+ 
| 3 | 2015-05-10 00:00:00 | 2015-05-12 00:00:00 | resolved | 
| 4 | 2015-05-11 00:00:00 | 1970-01-01 00:00:00 | open  | 
| 6 | 2015-05-11 00:00:00 | 2015-05-11 00:00:00 | resolved | 
+------+---------------------+---------------------+----------+ 
3 rows in set (0.01 sec) 
相關問題