Foros del Web » Programación para mayores de 30 ;) » Java »

llamar auna funcion que retorna un cursor de postgresql en Java

Estas en el tema de llamar auna funcion que retorna un cursor de postgresql en Java en el foro de Java en Foros del Web. hola a todos , espero me puedan ayudar en un inconveniente que tengo al momento de mostrar datos de uno función postgresql que retorna un ...
  #1 (permalink)  
Antiguo 01/04/2011, 17:53
 
Fecha de Ingreso: agosto-2007
Mensajes: 12
Antigüedad: 16 años, 8 meses
Puntos: 0
Mensaje llamar auna funcion que retorna un cursor de postgresql en Java

hola a todos , espero me puedan ayudar en un inconveniente que tengo al momento de mostrar datos de uno función postgresql que retorna un cursor


la funcion creada en postgresql es la Siguiente
Código SQL:
Ver original
  1. CREATE OR REPLACE FUNCTION LISTAR_MARCAS_DEMO(REFCURSOR) RETURNS REFCURSOR AS $$
  2. BEGIN
  3. OPEN $1 FOR SELECT *FROM ALMACEN.MARCA;
  4.  RETURN $1;
  5. END;$$
  6. LANGUAGE 'PLPGSQL';


y en java lo estoy llamando e la siguiente manera , me sale como mensaje que la función no existe .. o no se ha definido el parámetro 2
Código vb:
Ver original
  1. public static void main(String[] args) {
  2. boolean sw=false;
  3.       Conexion con= new Conexion();
  4.       CallableStatement cmd=null;
  5. try{
  6.    
  7.     con.getCon().setAutoCommit(false);
  8.  
  9. // Procedure call.
  10. con.getCon().setAutoCommit(false);
  11. CallableStatement proc = con.getCon().prepareCall("{ ? = call LISTAR_MARCAS_DEMO(?) }");
  12. proc.registerOutParameter(1, Types.OTHER);
  13. proc.execute();
  14. String cursorName = proc.getString(1);
  15.  
  16. proc.close();
  17. System.out.println(cursorName);
  18. //hile (results.next()) {
  19.    // System.out.println(results.getString(1));
  20. //}
  21. //results.close();
  22. //proc.close();
  23.     }
  24.    
  25. catch(SQLException ex){
  26.  System.out.println(ex);
  27. }
  28. }


Agradezco de antemano su ayuda.
  #2 (permalink)  
Antiguo 03/04/2011, 21:18
Avatar de dackiller  
Fecha de Ingreso: septiembre-2003
Ubicación: The Matrix
Mensajes: 341
Antigüedad: 20 años, 7 meses
Puntos: 4
Respuesta: llamar auna funcion que retorna un cursor de postgresql en Java

Hola, aunque nunca he usado refcursors en jdbc, estoy observando que lo que deseas es retornar una tabla ya existente.

Yo en tu caso no usaria refcursor sino devolver un record usando %ROWTYPE en el store procedure.

A diferencia del recursor, rowtype lo que hace es definir el tipo de record que se va devolver, es decir, que los registros corresponden exactamente igual a la tabla en cuestion, ademas de que no necesitas des-activar el auto commit.

Con respecto al error que es muy claro, es que no has definido el segundo parametro. Si no me equivoco, el segundo parametro del Call debe ser un String el cual sera el nombre devuelto por el refcursor.

Por si quedan dudas te mando el enlace del tutorial del jdbc 8.1. La diferencias entre versiones del jdbc va mas que todo hacia el uso de Composite Types que son caracteristicas nuevas de postgres por este motivo creo que no tendrias mayores problemas al usar el siguiente tutorial.

Importante, cuando devuelvas mas de 1 registro, debes usar RETURN NEXT.

Busca la documentacion de postgres %ROWTYPE, RETURN, y RECORD.

Saludos.

jdbc.postgresql.org/documentation/81/callproc.html
__________________
--
NOTA: Si haz conseguido la solución a tu problema, por favor edita el titulo del tema colocando el prefijo [SOLUCIONADO], para que otros usuarios puedan encontrar soluciones más rápido.

Etiquetas: cursor, postgresql
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 05:48.