将整数字符串传递给存储过程

时间:2011-11-10 22:44:51

标签: mysql stored-procedures

我是初级存储过程和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)
    ...

任何帮助将不胜感激。

1 个答案:

答案 0 :(得分: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)