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