我想从Postgres调用一个函数,该函数在Postgres更改游标名称时返回游标,因此解决方案是将游标名称作为函数参数提供,然后从下面的调用返回的结果中获取该游标是代码i正在调用函数
DefaultTransactionDefinition def = new DefaultTransactionDefinition();
TransactionStatus status = dsTransactionManager.getTransaction(def);
try
{
List<Users> lst = new ArrayList<>();
SimpleJdbcCall simpleJdbcCall = new SimpleJdbcCall(jdbcTemplate.getDataSource());
String cName = UUID.randomUUID().toString() + "_cur";
simpleJdbcCall.setFunction(true);
simpleJdbcCall.withFunctionName("get_org_users");
simpleJdbcCall.returningResultSet(cName, BeanPropertyRowMapper.newInstance(Users.class));
simpleJdbcCall.declareParameters(
new SqlParameter("orgid", Types.BIGINT),
new SqlParameter("user_cn", Types.OTHER),
new SqlOutParameter(cName, Types.REF_CURSOR)
);
Map<String, Object> params = new HashMap<String, Object>();
params.put("orgid", orgID);
params.put("user_cn", cName);
Map<String, Object> result =
simpleJdbcCall.execute(params);
dsTransactionManager.commit(status);
lst = (List<Users>) result.get(cName);
return lst;
}
catch (Exception e) {
dsTransactionManager.rollback(status);
throw e;
}
finally
{
}
我想问的是是否可以在不指定游标名称的情况下获取游标,例如,我可以使用简单的jdbc
connection = jdbcTemplate.getDataSource().getConnection();
connection.setAutoCommit(false);
.....................
CallableStatement proc=connection.prepareCall(query,ResultSet.TYPE_SCROLL_INSENSITIVE, ResultSet.CONCUR_READ_ONLY);
..............
proc.execute();
rs = (ResultSet) proc.getObject(1);
您可以从上面的代码中看到我执行了该函数并获得了游标,而未指定游标名称,因此可以对postgres进行同样的操作吗?