Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

901
Visualizações
Llame al procedimiento almacenado de PostgreSQL usando SimpleJdbcCall y REF_CURSOR

Quiero llamar a un procedimiento almacenado de PostgreSQL con REF_CURSOR usando SimpleJDBCCall. Mi procedimiento almacenado se parece a:

 CREATE OR REPLACE FUNCTION public.procName() RETURNS refcursor AS $BODY$ DECLARE ref1 refcursor := 'cursor'; BEGIN open ref1 for SELECT * FROM public."tableName"; RETURN ref1; END; $BODY$ LANGUAGE plpgsql VOLATILE COST 100; ALTER FUNCTION public.procName() OWNER TO postgres;

Traté de llamar al procedimiento usando el siguiente código JAVA:

 JdbcTemplate jdbcTemplate = new JdbcTemplate(getDataSource()); jdbcTemplate.setResultsMapCaseInsensitive(true); SimpleJdbcCall jdbcCall = new SimpleJdbcCall(jdbcTemplate); jdbcCall.withFunctionName("procName").returningResultSet("cursor", BeanPropertyRowMapper.newInstance(CustomEntity.class)); Map m = jdbcCall.execute();

Ejecutando el código recibí un mensaje de error:

 org.postgresql.util.PSQLException: ERROR: cursor "cursor" does not exist at org.postgresql.core.v3.QueryExecutorImpl.receiveErrorResponse(QueryExecutorImpl.java:2270) at org.postgresql.core.v3.QueryExecutorImpl.processResults(QueryExecutorImpl.java:1998) at org.postgresql.core.v3.QueryExecutorImpl.execute(QueryExecutorImpl.java:255) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:570) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:406) at org.postgresql.jdbc2.AbstractJdbc2Connection.execSQLQuery(AbstractJdbc2Connection.java:339) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.internalGetObject(AbstractJdbc2ResultSet.java:213) at org.postgresql.jdbc3.AbstractJdbc3ResultSet.internalGetObject(AbstractJdbc3ResultSet.java:36) at org.postgresql.jdbc4.AbstractJdbc4ResultSet.internalGetObject(AbstractJdbc4ResultSet.java:312) at org.postgresql.jdbc2.AbstractJdbc2ResultSet.getObject(AbstractJdbc2ResultSet.java:2711) at org.postgresql.jdbc2.AbstractJdbc2Statement.executeWithFlags(AbstractJdbc2Statement.java:457) at org.postgresql.jdbc2.AbstractJdbc2Statement.execute(AbstractJdbc2Statement.java:413) at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1068) at org.springframework.jdbc.core.JdbcTemplate$6.doInCallableStatement(JdbcTemplate.java:1066) at org.springframework.jdbc.core.JdbcTemplate.execute(JdbcTemplate.java:1016) at org.springframework.jdbc.core.JdbcTemplate.call(JdbcTemplate.java:1066) at org.springframework.jdbc.core.simple.AbstractJdbcCall.executeCallInternal(AbstractJdbcCall.java:397) at org.springframework.jdbc.core.simple.AbstractJdbcCall.doExecute(AbstractJdbcCall.java:369) at org.springframework.jdbc.core.simple.SimpleJdbcCall.execute(SimpleJdbcCall.java:173)

Probé este código usando un procedimiento almacenado de Oracle, también con REF_CURSOR. Usé en lugar de withFunctionName() el método withProcedureName() . El procedimiento almacenado se llama correctamente y se devuelve el resultado.

¿Hay alguna manera de llamar al procedimiento almacenado de PostreSQL que devuelve un REF_CURSOR usando SimpleJDBCCall?

over 4 years ago · Santiago Trujillo
1 Respostas
Responde à pergunta

0

SimpleJdbcCall call = new SimpleJdbcCall(jdbcTemplate).withProcedureName("genidproc"); HashMap<String, Object> params = new HashMap<String, Object>(); params.put("keystr", "uno"); Map<String, Object> result = call.execute(params); for (String s : result.keySet()) { pw.println("6.0 " + result.get(s)); }
over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda