2011-11-10 37 views
0

我是新來的一般存儲的特效和MySQL,我打電話的SP與傳遞整數的字符串存儲過程

String ids = "1,2,3,4,5"; 
    CallableStatement proc = 
     connection.prepareCall("{ call p_test(?) }"); 
    proc.setString(1, ids); 
    cs.execute(); 



    CREATE PROCEDURE test.`p_test`(IN ids String) 
    ... 
    SELECT * 
    FROM table1 t1 
    WHERE t1.int_field IN (ids) 
    ... 

任何幫助將不勝感激。

回答

0

Mysql沒有可以傳遞給存儲過程的數組類型。你傳遞的只是一個字符串,並且只會匹配如果t1.int_field in ("1,2,3,4,5,6"),一個字符串。你想要的是t1.int_field in (1,2,3,4,5,6),一個整數列表。

一般的做法是:

  1. 讓你的存儲過程創建一個臨時表來保存個人整數值在循環中
  2. 使用MySQL字符串函數分手字符串「1,2, 3,4,5,6「並將每個值插入到臨時表中。
  3. 使用包含查詢中的值的臨時表。您的WHERE子句會變成類似於WHERE t1.int_field in (select ID from my_temp_table)
+1

除了它不起作用。編號REGEXP'1 | 2 | 3'將匹配比id = 1,id = 2和id = 3更多的記錄。它將匹配id = 21,id = 11,id = 14,id = 100等 –

+0

ahhh你是正確的。在這種情況下,我會放棄臨時表並創建一個分割字符串的函數。類似於 SELECT * FROM table1 t1 WHERE t1.int_field IN(SELECT id FROM split_function(ids,',')。該函數將類似於您的項目2 –

+0

是否有String函數的示例? – Shah

相關問題