Передача строки целых чисел в хранимую процедуру - PullRequest
0 голосов
/ 11 ноября 2011

Я новичок в хранимых процессах и 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 голосов
/ 11 ноября 2011

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)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...