Я следую на этот вопрос , чтобы вызвать хранимую процедуру с 1 входным параметром и 1 выходным параметром:
Mapper:
package myapp.test.persistence;
import myapp.test.ExpectationProcessMessage;
import org.apache.ibatis.annotations.*;
import java.util.List;
import java.util.Map;
@Mapper
public interface ExpectationProcessMessageMapper {
List<ExpectationProcessMessage> processExpectation(Map<String, Object> params);
}
XML содержимое:
<mapper namespace="myapp.test.persistence.ExpectationProcessMessageMapper">
<resultMap id="expectationProcessMessages" type="myapp.test.ExpectationProcessMessage">
<id property="errorCode" column="error_code"/>
<result property="errorMessage" column="error_message"/>
</resultMap>
<select id="processExpectation" parameterType="java.util.HashMap" resultMap="expectationProcessMessages">
{call cp_process_expectation_api (#{ai_expectation_id,jdbcType=NUMERIC, javaType=java.lang.Integer,mode=IN},
#{ac_process_flag,jdbcType=VARCHAR, javaType=java.lang.String,mode=OUT})}
</select>
</mapper>
Класс вызова:
package myapp.test.persistence;
@Repository
public class SqlExpectationRepositoryImpl implements ExpectationRepository {
...
@Override
public ExpectationProcess processExpectation(Integer expectationId) {
Map<String, Object> params = new HashMap<String, Object>();
params.put("ai_expectation_id", expectationId);
params.put("ac_process_flag", null);
List<ExpectationProcessMessage> expectationProcessMessages = expectationProcessMessageMapper.processExpectation(params);
System.out.println(params.get("ac_process_flag"));
}
...
}
Определение хранимой процедуры:
begin
declare @ai_expectation_id int = 0
declare @ac_process_flag char
declare @result int
exec
@result = cp_process_expectation_api
@ai_expectation_id,
@ac_process_flag output
select @ac_process_flag
select @result as result
end
Но я получил исключение:
Причина : com.microsoft.sqlserver.jdb c .SQLServerException: значение не задано для параметра с номером 2.
Без категории SQLException; SQL состояние [ноль]; код ошибки [0]; Значение не установлено для параметра № 2 .; вложенное исключение: com.microsoft.sqlserver.jdb c .SQLServerException: значение не задано для параметра с номером 2.