我在pl / pgsql中编写了一个存储过程,它在pgAdmin中工作正常。我使用simpleJBDCCall来调用返回一组记录的过程。当我使用SimpleJdbcCall执行函数从java调用存储过程时,只有1行返回给java,在pgAdmin中调用的相同过程返回多行。
我的存储过程是:
CREATE OR REPLACE FUNCTION get_instruments_list(userName varchar, OUT a int,out b int,out c int)
RETURNS setof Record
AS
$$
DECLARE
BEGIN
RETURN query select 1,2,3;
RETURN QUERY select 5,2,3;
RETURN query select 6,2,3;
return;
END;
$$
LANGUAGE 'plpgsql' VOLATILE;
我调用存储过程的java函数是:
public static void main(String[] a){
ApplicationContext applicationContext = new ClassPathXmlApplicationContext("/config/applicationContext-postgreSQL.xml");
JdbcTemplate jdbcTemplate = (JdbcTemplate) applicationContext.getBean("pgJdbcTemplate");
SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate);
jdbcCall.setSchemaName("dhapic");
jdbcCall.setProcedureName("get_instruments_list");
Map<String, String> inputParamater = new HashMap<>();
inputParamater.put("userName", "dhanush");
jdbcCall.returningResultSet("result", new RowMapper() {
@Override
public InstrumentList mapRow(ResultSet rs, int rowNum) throws SQLException {
InstrumentList instrumentList = new InstrumentList();
instrumentList.setInstrumentId(rs.getInt(1));
instrumentList.setInstrumentToken(rs.getInt(2)+"");
instrumentList.setUserRole(rs.getInt(3)+"");
return instrumentList;
}
});
Map<String,Object> response = jdbcCall.execute(inputParamater);
System.out.println("response"+response);
}
使用spring传递JdbcTemplet值。
响应对象只包含1行,但我期待3行。 请帮我调试一下这个问题。