Foros del Web » Programación para mayores de 30 ;) » Bases de Datos General » PostgreSQL »

Problema con SP devolviendo datos.

Estas en el tema de Problema con SP devolviendo datos. en el foro de PostgreSQL en Foros del Web. Buenas tardes amigos, Tengo un SP en 'SQL', el cual deberia devolverme los registros de una select. Sin embargo, solo me devuelve el primer registro. ...
  #1 (permalink)  
Antiguo 25/07/2007, 04:34
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 6 meses
Puntos: 7
Problema con SP devolviendo datos.

Buenas tardes amigos,

Tengo un SP en 'SQL', el cual deberia devolverme los registros de una select. Sin embargo, solo me devuelve el primer registro.

Ahora no tengo aqui el codigo para mostrarles, pero la definicion esta bien, devuelve la funcion un tipo templeados.

y la consulta es: select * from templeados;


Alguien sabe por que solo me devuelve el primer registro unicamente ??

Tambien probe con plpgsql, pero me dice que la consulta no tiene lugar donde ubicarse... (O algo asi)

Código:
create or replace function pdameusuarios() RETURNS tusuarios AS
$BODY$
BEGIN
        SELECT * FROM tusuarios;
END;
$BODY$
LANGUAGE "plpgsql" VOLATILE
para llamar al SP de "sql" o al de "plpgsql" lo intento hacer asi: select * from pdameusuarios();
__________________
Charlie.

Última edición por chcma; 25/07/2007 a las 04:40
  #2 (permalink)  
Antiguo 25/07/2007, 08:27
Avatar de xknown  
Fecha de Ingreso: diciembre-2004
Ubicación: Cusco - Perú
Mensajes: 2.248
Antigüedad: 20 años
Puntos: 7
Re: Problema con SP devolviendo datos.

Tu función está mal definida si quieres regresar un conjunto de datos, lee la documentación.

Saludos
__________________
Alex Concha
Buayacorp - Programación y Diseño
  #3 (permalink)  
Antiguo 26/07/2007, 00:19
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 6 meses
Puntos: 7
Re: Problema con SP devolviendo datos.

Bueno, no creo que esté mal definida, pero gracias por el comentario. Aun que la verdad es que ya he resuelto el problema amigo:

create or replace function pdameusuarios() RETURNS SETOF tusuarios AS
$BODY$
BEGIN
SELECT * FROM tusuarios;
END;
$BODY$
LANGUAGE "sql" VOLATILE


Como ven, con SQL ya lo tengo resuelto, asi me devuelve todos los registros sin ningún problema. Sin embargo... supongamos que quiero que esa consulta quiero parsearla por un CURSOR para hacer X cosas... para eso necesitaria plpgsql y... con este lenguage todavía no soy capaz de devolver los datos. ¿Alguien puede darme alguna orientación?

Gracias.
__________________
Charlie.
  #4 (permalink)  
Antiguo 26/07/2007, 02:18
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 10 meses
Puntos: 13
Re: Problema con SP devolviendo datos.

Buenas chcma,

te doy un ejemplo, adaptando tu funcion de sql a plpgsql:

CREATE OR REPLACE FUNCTION pdameusuarios() RETURNS SETOF tusuarios AS
$BODY$
DECLARE
reg_tabla tusuarios;
BEGIN
FOR reg_tabla IN select * from tusuarios
LOOP
return next reg_tabla;
END LOOP;
END;
$BODY$
LANGUAGE 'plpgsql' VOLATILE;

asi de simple.

Un saludo
  #5 (permalink)  
Antiguo 26/07/2007, 06:06
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 6 meses
Puntos: 7
Re: Problema con SP devolviendo datos.

Aha... y en el caso de que quiera devolver en plpgsql, todos los registros de la tabla ? como podría hacer ?, ya que entiendo que asi... solo me hará el primer return.
__________________
Charlie.
  #6 (permalink)  
Antiguo 27/07/2007, 06:32
 
Fecha de Ingreso: junio-2003
Ubicación: Asturias
Mensajes: 2.429
Antigüedad: 21 años, 6 meses
Puntos: 7
Re: Problema con SP devolviendo datos.

Bueno, vereis, mi intencion es explotar el SP desde .NET. Por lo que agradeceria me pudieran decir si (Como en oracle), podría devolver un parametro de salida de tipo refcursor.

Asi desde .NET podria recuperar los datos.

Es decir en vez de hacer:
Código:
CREATE OR REPLACE FUNCTION pdameusuarios2(refcursor) RETURNS refcursor AS
$BODY$
BEGIN
	OPEN $1 FOR SELECT * FROM tusuarios;
	RETURN $1;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION pdameusuarios2(refcursor) OWNER TO "admin";


--PARA PROBAR QUE FUNCIONA
select pdameusuarios2('micursor');
FETCH ALL in micursor;


Crear algo asi:
Código:
CREATE OR REPLACE FUNCTION pdameusuarios2(OUT miParametro refcursor) RETURNS VOID AS
$BODY$
BEGIN
	OPEN $1 FOR SELECT * FROM tusuarios;
	RETURN $1;
END;
$BODY$
  LANGUAGE 'plpgsql' VOLATILE;
ALTER FUNCTION pdameusuarios2(refcursor) OWNER TO "admin";


--PARA PROBAR QUE FUNCIONA
declare miCursor refcursor
select pdameusuarios2(miCursor);
FETCH ALL in miCursor;
__________________
Charlie.
  #7 (permalink)  
Antiguo 30/07/2007, 02:35
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 10 meses
Puntos: 13
Re: Problema con SP devolviendo datos.

Buenas,
return next reg_tabla;

con esto devuelves todos los registros del cursor, no sólo el primero.

Un saludo
  #8 (permalink)  
Antiguo 22/09/2007, 09:32
 
Fecha de Ingreso: abril-2007
Ubicación: zacatras
Mensajes: 13
Antigüedad: 17 años, 7 meses
Puntos: 0
Re: Problema con SP devolviendo datos.

Cita:
Iniciado por seyko Ver Mensaje
Buenas,
return next reg_tabla;

con esto devuelves todos los registros del cursor, no sólo el primero.

Un saludo
como asi.... me explicas como quedaria la funcion implementando lo que dices¿?¿?¿?
  #9 (permalink)  
Antiguo 24/09/2007, 02:43
 
Fecha de Ingreso: febrero-2007
Mensajes: 1.292
Antigüedad: 17 años, 10 meses
Puntos: 13
Re: Problema con SP devolviendo datos.

Cita:
Iniciado por tekun Ver Mensaje
como asi.... me explicas como quedaria la funcion implementando lo que dices¿?¿?¿?
Si lees el resto del hilo, veras que ya lo explique arriba.
Si me dices que es lo que no entiendes, intento aclarartelo.

Un saludo
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 08:12.