Re: Funcion con RETURNS SETOF record

From: Alberto Cuevas <betocuevas(dot)net(at)gmail(dot)com>
To: 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 18:44:58
Message-ID: CA+mENxoCM-T3EqoVnxQ20GxQ=MEpvzZP21+f0oL9n541+hddFA@mail.gmail.com
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

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));

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?

Saludos.
El mar., 19 ene. 2016 a las 10:55, Hellmuth Vargas (<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
> codigo ALIAS 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>:
>
>> 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
>
>

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Anthony Sotolongo 2016-01-19 19:21:14 Re: Funcion con RETURNS SETOF record
Previous Message Cesar Erices 2016-01-19 17:03:02 Re: Ayuda de conexion