Re: Problema Con Procedimiento Almacenado

From: "Jaime Casanova" <systemguards(at)gmail(dot)com>
To: "Juan Pablo Pizarro Cruz" <jpablo(dot)pizarro(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: Problema Con Procedimiento Almacenado
Date: 2007-01-04 04:28:00
Message-ID: c2d9e70e0701032028u25861b9k1b4c141bf08fecd2@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

On 1/3/07, Jaime Casanova <systemguards(at)gmail(dot)com> wrote:
> On 1/3/07, Juan Pablo Pizarro Cruz <jpablo(dot)pizarro(at)gmail(dot)com> wrote:
> > Hola lista:
> >
> > En estos momento estoy trabajando con JSP + PostgreSql y al
> > realizar un procedimiento almacenado en la base de datos, no tengo
> > ningún problema, pero al utilizarlos en la capa de Persistencia, la
> > llamada al procedimiento almacenado no me retorna ningún valor, creo
> > que en JAVA la llamada de un procedimiento es distinta por lo que le
> > leído en internet, pero los ejemplos que salen sólo son de select sin
> > retornar valores.
> >
> > El procedimiento que estoy haciendo es el siguiente:
> >
> > CREATE OR REPLACE FUNCTION buscar_empleado("varchar", refcursor)
> > RETURNS refcursor AS
> > $BODY$BEGIN
> > OPEN $2 FOR select * from empleado where rut_empleado=$1;
> > return $2;
> > END;$BODY$
> > LANGUAGE 'plpgsql' VOLATILE;
> >
> > Este procedimiento lo ejecuto desde el pgadmin III de la siguiente manera:
> >
> > select buscar_empleado('14.107.720-1', 'jp');
> > fetch all in jp;
> >
> > y eso me retorna lo siguiente:
> >
> > "14.107.720-1";14107720;"juan pablo
> > ";"pizarro";"cruz";1000000
> > ;111111111;"avda. playa brava
> > 3404";"14.107.720-1";"DESHABILITADO";"jpablo(dot)pizarro(at)gmail(dot)com"
> >
> > Por lo tanto, el procedimiento almacenado si está funcionando. De
> > esta forma lo llamo desde php y python y nunca he tenido ningún
> > problema, pero ahora que estoy utilizando Java no se como hacerlo y
> > como indique anteriormente no he encontrado ejemplos parecido a lo que
> > quiero hacer.
> >
> > A continuación muestro el código Java de como estoy llamando al
> > procedimiento almacenado:
> >
> > import java.sql.CallableStatement;
> >
> > public class EmpleadoBD {
> >
> > public static Vector BuscarEmpleado(String rut) throws SQLException {
> > Connection conexion = ConexionBD.conectar();
> > CallableStatement cs = conexion.prepareCall("{call
> > buscar_empleado('"+rut+"','jp'); fetch all in jp;}");
>
> si estoy entendiendo bien esta parte ejecuta los comandos sql... ahora
> lo que no entiendo es porque usas call en vez de select... no he
> sabido que postgres soporte call asi que debo entender que eso lo
> procesa JSP y lo ha de estar transformando en PERFORM el cual ignora
> los resultados de la funcion...
>
> sin embargo, estoy adivinando aqui... yo no uso JSP
>

eso me pasa por hablar sin leer la documentacion primero...
la documentacion de jdbc dice que esto se hace asi

// Procedure call.
CallableStatement proc = conn.prepareCall("{ ? = call refcursorfunc() }");
proc.registerOutParameter(1, Types.Other);
proc.execute();
ResultSet results = (ResultSet) proc.getObject(1);
while (results.next()) {
// do something with the results...
}

http://jdbc.postgresql.org/documentation/82/callproc.html#get-refcursor-from-function-call

--
Atentamente,
Jaime Casanova

"Programming today is a race between software engineers striving to
build bigger and better idiot-proof programs and the universe trying
to produce bigger and better idiots.
So far, the universe is winning."
Richard Cook

In response to

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Raúl Andrés Duque 2007-01-04 04:28:01 Re: proteger archivo PGPASS.CONF
Previous Message Jaime Casanova 2007-01-04 04:18:17 Re: Problema Con Procedimiento Almacenado