Re: Funcion con RETURNS SETOF record

From: Anthony Sotolongo <asotolongo(at)gmail(dot)com>
To: Alberto Cuevas <betocuevas(dot)net(at)gmail(dot)com>, Hellmuth Vargas <hivs77(at)gmail(dot)com>
Cc: "pgsql-es-ayuda(at)postgresql(dot)org" <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Funcion con RETURNS SETOF record
Date: 2016-01-19 19:21:14
Message-ID: 569E8CAA.1060404@gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Hola nuevamente, respondo entre lineas:

El 19-01-2016 a las 15:44, Alberto Cuevas escribió:
> Muchas gracias por tu respuesta, tengo dos consultas mas:
>
> 1 - Si tengo 80 campos en mi select tambien debo mencionarlos es decir:
>
> SELECT * from f_xconsulta('01') as (campo1 CHAR(2), campo2
> VARCHAR(20), campo3 VARCHAR(4)..............campo80 CHAR(1));
>
Hasta donde conozco si debes mencionarlos todos, es para, como te decía
anteriormente, castear el resultado de salida de la función, si te es
incomodo llamarlos así, puedes usar RETURNS TABLE en vez de RETURNS
SETOF record , si lo que vas a ejecutar una query sin muchas lógica
dentro de una función, tal vez te convenga utilizar una función SQL en
vez de una plgsql, puede que resulte un poco más rápido.

> 2 - RETURN QUERY hace lo mismo que
>
> FOR _registro IN
> SELECT COD_PER,
> NOM_PER
> FROM XPERSONA
> WHERE COD_PER = codigo
> loop
> return next _registro;
>
> END LOOP;
>
> Hay alguna ventaja o diferencia o recomendacion?
puedes leer esto:
http://www.postgresql.org/docs/9.5/interactive/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING

saludos
>
> Saludos.
> El mar., 19 ene. 2016 a las 10:55, Hellmuth Vargas (<hivs77(at)gmail(dot)com
> <mailto:hivs77(at)gmail(dot)com>>) escribió:
>
> Hola Lista
>
> La reescribí asi:
>
> CREATE OR REPLACE FUNCTION public.f_xconsulta(character varying)
> RETURNS SETOF record AS
> $BODY$
> DECLARE
> codigoALIAS FOR $1;
> _registro record;
>
> BEGIN
> RETURN QUERY SELECT COD_PER,
> NOM_PER
> FROM XPERSONA
> WHERE COD_PER = codigo;
>
> END;
>
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE
> COST 100
>
> ROWS 1000;
>
>
> Para ejecutar:
>
> SELECT * from f_xconsulta('01') as (COD_PER CHAR(2),NOM_PER
> VARCHAR(20));
>
>
>
>
>
> 2016-01-19 10:46 GMT-05:00 Alberto Cuevas
> <betocuevas(dot)net(at)gmail(dot)com <mailto:betocuevas(dot)net(at)gmail(dot)com>>:
>
> Hola estoy haciendo unas pruebas para usar una función con
> RETURNS SETOF record, con los siguiente:
>
> CREATE TABLE XPERSONA (
> COD_PER CHAR(2),
> NOM_PER VARCHAR(20));
>
> INSERT INTO XPERSONA VALUES ('01', 'ALBERTO');
> INSERT INTO XPERSONA VALUES ('02', 'CARLOS');
> INSERT INTO XPERSONA VALUES ('03', 'JUAN');
>
> CREATE OR REPLACE FUNCTION public.f_xconsulta(character
> varying) RETURNS SETOF record AS
> $BODY$
> DECLARE
> codigo ALIAS FOR $1;
> _registro record;
>
> BEGIN
>
> FOR _registro IN
> SELECT COD_PER,
> NOM_PER
> FROM XPERSONA
> WHERE COD_PER = codigo
> loop
> return next _registro;
>
> END LOOP;
>
> RETURN;
> END;
>
> $BODY$
> LANGUAGE 'plpgsql' VOLATILE
> COST 100
>
> ROWS 1000;
>
>
> Pero al ejecutar:
>
> SELECT f_xconsulta('01');
>
> Me muestra el siguiente mensaje en PGAdmin:
>
> ERROR: se llamó una función que retorna un conjunto en un
> contexto que no puede aceptarlo CONTEXT: función PL/pgSQL
> f_xconsulta(character varying) en la línea 17 en RETURN NEXT
>
> ********** Error **********
>
> ERROR: se llamó una función que retorna un conjunto en un
> contexto que no puede aceptarlo SQL state: 0A000 Context:
> función PL/pgSQL f_xconsulta(character varying) en la línea 17
> en RETURN NEXT
>
> Me podrian dar una mano por favor. Uso Postgresql 9.4.5.
>
>
>
>
> --
> Cordialmente,
>
> Ing. Hellmuth I. Vargas S.
> Esp. Telemática y Negocios por Internet
> Oracle Database 10g Administrator Certified Associate
> EnterpriseDB Certified PostgreSQL 9.3 Associate
>

---
El software de antivirus Avast ha analizado este correo electrónico en busca de virus.
https://www.avast.com/antivirus

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Alvaro Herrera 2016-01-19 19:52:18 Re: Funcion con RETURNS SETOF record
Previous Message Alberto Cuevas 2016-01-19 18:44:58 Re: Funcion con RETURNS SETOF record