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);       
Другие вопросы по тегам