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 (<hiv...@gmail.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....@gmail.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
>
>

Responder a