2011-11-10 36 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

相关问题