【发布时间】:2019-01-29 05:34:08
【问题描述】:
使用 Spring 文档中的示例,我尝试从 mySQL 函数返回一个值。我不断收到错误Can't set IN parameter for return value of stored function call;。
我创建了一个运行良好的 mySQL 函数(在 MySQL Workbench 中运行)。我写了一个SimpleJdbcCall 语句,按照 Spring 文档示例设置了参数,但始终出现此错误。如果我把函数变成一个过程,代码就可以工作,我只需要从结果集中检索返回值。
我使用了https://docs.spring.io/spring/docs/3.0.0.M3/reference/html/ch13s05.html,第 13.5.8 节作为参考。
CREATE FUNCTION `ScenarioRegistration`(
environment VARCHAR(45),
username VARCHAR(15),
scenario_name VARCHAR(45)) RETURNS int(11)
几个 SELECT 语句后跟一个 INSERT 然后
RETURN scenario_id; // The inserted id
Java 代码:
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(getJdbcTemplate())
.withFunctionName("ScenarioRegistration")
.withoutProcedureColumnMetaDataAccess();
simpleJdbcCall.addDeclaredParameter(new SqlParameter("environment"
,Types.VARCHAR));
simpleJdbcCall.addDeclaredParameter(new SqlParameter("username"
,Types.VARCHAR));
simpleJdbcCall.addDeclaredParameter(new SqlParameter("scenario_name"
,Types.VARCHAR));
SqlParameterSource parameters = new MapSqlParameterSource()
.addValue("environment", environment)
.addValue("username", username)
.addValue("scenario_name", scenario);
simpleJdbcCall.setReturnValueRequired(true);
Integer scenario_id = simpleJdbcCall.executeFunction(
Integer.class, parameters);
我想要例程做的就是将新插入场景的 id 还给我。
我得到的是:
SQL [{? = call scenarioregistration(?, ?)}]; Can't set IN parameter for return value of stored function call.
我觉得有趣的是,它采用了我的三个输入值并将它们更改为一个输出和两个输入值。
谁能告诉我这个问题以及如何解决它?
谢谢,
史蒂文。
【问题讨论】:
标签: mysql spring spring-jdbc