Empresas
Empleos
  • Sobre nosotros
  • Soluciones
    • Publicación de vacantes
      Publica tu vacante y recibe candidatos calificados en 48h.
    • Evaluación de candidatos
      500+ pruebas técnicas y psicológicas, más anti-fraude.
    • Headhunting
      Búsqueda ejecutiva a la medida de principio a fin.
    • Nómina + EOR
      Dispersión de nómina y EOR en más de 15 países de LATAM.
  • Precios
  • Empleos

0

335
Vistas
¿Cómo llamar a un procedimiento almacenado con el cursor de referencia como parámetro de salida usando Spring?

Tengo un procedimiento almacenado que tiene un cuerpo como: -

PROCEDURE PROC_NAME(param1 in varchar2,param2 in varchar2,results_cursor OUT CURSOR_TYPE);

Cada fila de resultado es equivalente a una instancia de una determinada clase definida por el usuario.

¿Cómo puedo llamar a esto en primavera. Revisé mucho google y stackoverflow pero no pude encontrar una respuesta adecuada.

¿Puede alguien por favor darme una solución a esto. Gracias por adelantado.

about 4 years ago · Santiago Trujillo
2 Respuestas
Responde la pregunta

0

Aquí hay algo que armé basado en esta pregunta de StackOverflow y la documentación de Spring :

 import java.sql.Types; import java.util.HashMap; import java.util.Map; import javax.sql.DataSource; import oracle.jdbc.OracleTypes; import org.springframework.jdbc.core.SqlOutParameter; import org.springframework.jdbc.core.SqlParameter; import org.springframework.jdbc.object.StoredProcedure; public class SampleStoredProcedure extends StoredProcedure { public SampleStoredProcedure(DataSource dataSource) { super(dataSource, "PROC_NAME"); declareParameter(new SqlParameter("param1", Types.VARCHAR)); declareParameter(new SqlParameter("param2", Types.VARCHAR)); declareParameter(new SqlOutParameter("results_cursor", OracleTypes.CURSOR, new SomeRowMapper())); compile(); } public Map<String, Object> execute(String param1, String param2) { Map<String, Object> inParams = new HashMap<>(); inParams.put("param1", param1); inParams.put("param2", param2); Map output = execute(inParams); return output; } }

Si su procedimiento almacenado está en otro esquema o en un paquete, deberá ajustar el nombre del procedimiento almacenado en lo anterior. Además, deberá especificar un mapeador de filas para usar en lugar de SomeRowMapper .

Para llamarlo:

 DataSource dataSource = ... ; // get this from somewhere SampleStoredProcedure sp = new SampleStoredProcedure(dataSource); Map<String, Object> result = sp.execute("some string", "some other string"); // Do something with 'result': in particular, result.get("results_cursor") // will be the list of objects returned

Alternativamente, puede usar un SimpleJdbcCall :

 DataSource dataSource = ... ; // get this from somewhere SimpleJdbcCall jdbcCall = new SimpleJdbcCall(dataSource); Map<String, Object> result = jdbcCall.withProcedureName("PROC_NAME") .declareParameters( new SqlParameter("param1", Types.VARCHAR), new SqlParameter("param2", Types.VARCHAR), new SqlOutParameter("results_cursor", OracleTypes.CURSOR, new SomeRowMapper())) .execute("some string", "some other string");

Si el procedimiento almacenado está en un paquete, deberá agregar una línea

 .withCatalogName("PACKAGE_NAME")

a la configuración de jdbcCall . Del mismo modo, si está en un esquema diferente, deberá agregar

 .withSchemaName("SCHEMA_NAME")
about 4 years ago · Santiago Trujillo Denunciar

0

Por favor, eche un vistazo una vez. Lista de datos de usuario;

 SimpleJdbcCall executor = new SimpleJdbcCall(jdbcTemplate) .withProcedureName("SP_CL_USERPKS_FOLDER").withoutProcedureColumnMetaDataAccess() .declareParameters( new SqlParameter("INparam1", Types.INTEGER), new SqlParameter("INparam2", Types.VARCHAR), new SqlOutParameter("OUTParam1", OracleTypes.CURSOR), new SqlOutParameter("OUTParam2", OracleTypes.VARCHAR)); executor.compile(); SqlParameterSource param = new MapSqlParameterSource() .addValue("INparam1", loginPk) .addValue("INparam2", email); Map map = executor.execute(param); userData = (List<Map>) map.get("OUTParam1"); String msg = (String) map.get("OUTParam2");
about 4 years ago · Santiago Trujillo Denunciar
Responde la pregunta
Encuentra empleos remotos

¡Descubre la nueva forma de encontrar empleo!

Top de empleos
Top categorías de empleo
Empresas
Publicar vacante Precios Comercial
Legal
Términos y condiciones Política de privacidad
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomiéndame algunas ofertas
Necesito ayuda