Java: Callablestatement.prepareCall превращает CALL в SELECT
String call = "{?= CALL Proc(?)}";
CallableStatement cs = conn.prepareCall(call);
cs.registerOutParameter(1, Types.DECIMAL, 0);
cs.setString(2, "String");
System.out.println(cs);
cs.execute(); // <-- ERROR
Первая строка простой процедуры MySQL:
CREATE DEFINER=`dev`@`11.22.33.44` PROCEDURE `Proc`(IN `login` VARCHAR(255), OUT `var` DECIMAL(20,2)
.prepareCall превращает мой CALL в SELECT (мое предположение), который mysql рассматривает функцию и выдает мне ошибку:
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: FUNCTION Proc does not exist
System.out дает мне:
com.mysql.jdbc.JDBC4CallableStatement@38d060ac: SELECT Proc('flavi')
Как я могу правильно назвать эту процедуру?
1 ответ
Попробуйте заменить
String call = "{?= CALL Proc(?)}";
с
String call = "{CALL Proc(?, ?)}";
Первый синтаксис предназначен для вызова хранимой функции, которой у вас нет. У вас есть хранимая процедура.
Вы также захотите поменять местами порядок параметров привязки, так как параметр 1 теперь login
строка и параметр 2 являются выходной переменной:
cs.setString(1, "String");
cs.registerOutParameter(2, Types.DECIMAL, 0);