Re: returns de las funciones

Lists: pgsql-es-ayuda
From: Raisa Perdomo Miranda <raisaperdomo(at)gmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: returns de las funciones
Date: 2005-05-26 22:54:59
Message-ID: ebccc9305052615544f2d3c73@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

hola lista...
cuado quiero que la funcion me devuelva una consulta de que tipo de dato
debe ser RETURNS?, un record, no?
pero en el cuerpo de la funcion que debo devolver en RETURN?
por ejemplo:

CREATE OR REPLACE FUNCTION "public"."prueba" (id_persona VARCHAR) RETURNS
"pg_catalog"."record" AS
$body$
begin
select * from tbl_persona where id_persona = '01';
*return record; --DUDA
*end
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

de esta manera me da el siguiente error:
*ERROR*: RETURN must specify a record or row variable in function returning
tuple at or near "record" at character 167


From: Jaime Casanova <systemguards(at)gmail(dot)com>
To: Raisa Perdomo Miranda <raisaperdomo(at)gmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: returns de las funciones
Date: 2005-05-26 23:21:23
Message-ID: c2d9e70e05052616217b595dc2@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

On 5/26/05, Raisa Perdomo Miranda <raisaperdomo(at)gmail(dot)com> wrote:
> hola lista...
> cuado quiero que la funcion me devuelva una consulta de que tipo de dato
> debe ser RETURNS?, un record, no?
> pero en el cuerpo de la funcion que debo devolver en RETURN?
>
> por ejemplo:
>
> CREATE OR REPLACE FUNCTION "public"."prueba" (id_persona VARCHAR) RETURNS
> "pg_catalog"."record" AS
> $body$
> begin
> select * from tbl_persona where id_persona = '01';
> return record; --DUDA
> end
> $body$
> LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
>
> de esta manera me da el siguiente error:
> ERROR: RETURN must specify a record or row variable in function returning
> tuple at or near "record" at character 167
>

Si solo quieres un select en una tabla haz

CREATE OR REPLACE FUNCTION "public"."prueba" (id_persona VARCHAR) RETURNS
SETOF tbl_persona AS
$$
select * from tbl_persona where id_persona = '01';
$$
LANGUAGE 'sql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

--
Atentamente,
Jaime Casanova
(DBA: DataBase Aniquilator ;)


From: "Ing(dot) Jhon Carrillo - Caracas, Venezuela" <jdigital(at)cantv(dot)net>
To: "Raisa Perdomo Miranda" <raisaperdomo(at)gmail(dot)com>, <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: returns de las funciones
Date: 2005-05-27 13:42:27
Message-ID: 04f901c562c1$ec632d60$1400a8c0@tgusta2
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Hola, espero te sirva

CREATE OR REPLACE FUNCTION alguna_funcion()
RETURNS SETOF tu_tabla AS
'
DECLARE
rec tu_tabla;
BEGIN
FOR rec IN select * from tu_tabla LOOP
RETURN NEXT rec;
END LOOP;
RETURN;
END'
LANGUAGE 'plpgsql' ;

Jhon Carrillo
Ingeniero en Computación
jdigital+(at)+cantv+(dot)+net (quitar +)
+584145246033
Caracas - Venezuela

----- Original Message -----
From: Raisa Perdomo Miranda
To: pgsql-es-ayuda(at)postgresql(dot)org
Sent: Thursday, May 26, 2005 6:54 PM
Subject: [pgsql-es-ayuda] returns de las funciones

hola lista...
cuado quiero que la funcion me devuelva una consulta de que tipo de dato debe ser RETURNS?, un record, no?
pero en el cuerpo de la funcion que debo devolver en RETURN?

por ejemplo:

CREATE OR REPLACE FUNCTION "public"."prueba" (id_persona VARCHAR) RETURNS "pg_catalog"."record" AS
$body$
begin
select * from tbl_persona where id_persona = '01';
return record; --DUDA
end
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;

de esta manera me da el siguiente error:
ERROR: RETURN must specify a record or row variable in function returning tuple at or near "record" at character 167


From: Jairo Martín Miguel <jairo010(at)hotmail(dot)com>
To: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: returns de las funciones
Date: 2005-05-27 13:55:21
Message-ID: BAY104-F6374EE081F1C54E830D7381000@phx.gbl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

yo tengo una duda al respecto, esto funciona cuando el resultado que quieres
devolver es de una sola tabla, ya que puedes poner RETURNS SETOF mi_tabla.
Pero que pasa cuando lo que quieres devolver son campos de diferentes tablas
que salen de una consulta con INNER JOIN????? o que pasa si el número de
columnas del resultado es variable??

ej: yo en access puedo crear una consulta que me devuelva tantas columnas en
el resultado como valores distintos haya en el campo "persona" de la tabla
"personas".

se podría hacer algo así en postgres???

gracias

>Hola, espero te sirva
>
>CREATE OR REPLACE FUNCTION alguna_funcion()
> RETURNS SETOF tu_tabla AS
>'
>DECLARE
> rec tu_tabla;
>BEGIN
> FOR rec IN select * from tu_tabla LOOP
> RETURN NEXT rec;
> END LOOP;
> RETURN;
>END'
> LANGUAGE 'plpgsql' ;

> hola lista...
> cuado quiero que la funcion me devuelva una consulta de que tipo de dato
>debe ser RETURNS?, un record, no?
> pero en el cuerpo de la funcion que debo devolver en RETURN?
>
> por ejemplo:
>
> CREATE OR REPLACE FUNCTION "public"."prueba" (id_persona VARCHAR)
>RETURNS "pg_catalog"."record" AS
> $body$
> begin
> select * from tbl_persona where id_persona = '01';
> return record; --DUDA
> end
> $body$
> LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
>
> de esta manera me da el siguiente error:
> ERROR: RETURN must specify a record or row variable in function
>returning tuple at or near "record" at character 167
>

_________________________________________________________________
Moda para esta temporada. Ponte al día de todas las tendencias.
http://www.msn.es/Mujer/moda/default.asp


From: Miguel Miranda <mmiranda(at)123(dot)com(dot)sv>
To: Jairo Martín Miguel <jairo010(at)hotmail(dot)com>
Cc: pgsql-es-ayuda(at)postgresql(dot)org
Subject: Re: returns de las funciones
Date: 2005-05-27 14:57:48
Message-ID: 4297356C.7080005@123.com.sv
Views: Raw Message | Whole Thread | Download mbox | Resend email
Lists: pgsql-es-ayuda

Jairo Martín Miguel wrote:
> yo tengo una duda al respecto, esto funciona cuando el resultado que
> quieres devolver es de una sola tabla, ya que puedes poner RETURNS SETOF
> mi_tabla. Pero que pasa cuando lo que quieres devolver son campos de
> diferentes tablas que salen de una consulta con INNER JOIN????? o que
> pasa si el número de columnas del resultado es variable??
>
> ej: yo en access puedo crear una consulta que me devuelva tantas
> columnas en el resultado como valores distintos haya en el campo
> "persona" de la tabla "personas".
>
> se podría hacer algo así en postgres???
>
Por supuesto que se puede, esto es Postges :-)

Debes retornar un record en el caso de que el numero de columnas sea
variable, aunque no me explico como sera variable, ya que cuando
retornas un tipo record debes decirle el numero y tipo de campos que
esperas recibir cuando ejecutas la funcion, lo mejor quizas seria crear
un tipo y retornar setof tipo en la funcion, yo lo uso bastante y no he
tenido problemas.

Este link te puede ayudar
http://techdocs.postgresql.org/guides/SetReturningFunctions

Saludos