小知识,大挑战!本文正在参与“程序员必备小知识”创作活动。
先创建一个存储过程
create or replace package pck_binding_video is
PROCEDURE prc_binding(P_date date,
P_count out number,
P_RESULT_CODE OUT NUMBER, /*返回结果 1成功 0失败*/
P_RESULT_MESSAGE OUT VARCHAR2 /*返回信息*/);
end;
方法一、 执行但不能获取出参
final Object[] objects = {new Date(), 0, 0, ""};
final int update = jdbcTemplate.update("{CALL pck_binding_video.prc_binding(?,?,?,?)}", objects);
Arrays.stream(objects).forEach(System.out::println);
这种写法执行了存储过程,但objects的值不会更改
方法二、 执行并且获取出参
final Response execute = jdbcTemplate.execute("{CALL pck_binding_video.prc_binding(?,?,?,?)}",
(CallableStatementCallback<Response>) cs -> {
final Date sqlDate = new Date();
cs.setDate("P_date", sqlDate);
cs.registerOutParameter("P_count", Types.INTEGER);
cs.registerOutParameter("P_RESULT_CODE", Types.INTEGER);
cs.registerOutParameter("P_RESULT_MESSAGE", Types.VARCHAR);
cs.execute();
final Response response = new Response();
response.setData(sqlDate);
response.setCode(cs.getInt("P_RESULT_CODE"));
response.setMsg(cs.getString("P_RESULT_MESSAGE"));
response.setCount(cs.getLong("P_count"));
return response;
});