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