Gracias por tu consejo Edwin. Saludos.
El vie., 22 ene. 2016 a las 11:07, Edwin Quijada (< listas_quij...@hotmail.com>) escribió: > Si deseas no tener que usar el AS cuando la invocas podrias crear un tipo > de datos y retornar el SETOF de ese tipo de datos asi si podrias llamarla > SELECT f('01') sin tener que usar el AS, me gusta mas esta forma es mas > limpia y puedes docuemntar bien ese tipo ademas si son 80 campos imaginate > ese AS > > > ------------------------------ > *From:* pgsql-es-ayuda-ow...@postgresql.org < > pgsql-es-ayuda-ow...@postgresql.org> on behalf of Anthony Sotolongo < > asotolo...@gmail.com> > *Sent:* Tuesday, January 19, 2016 7:21 PM > *To:* Alberto Cuevas; Hellmuth Vargas > *Cc:* pgsql-es-ayuda@postgresql.org > *Subject:* Re: [pgsql-es-ayuda] Funcion con RETURNS SETOF record > > 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 > > <http://www.postgresql.org/docs/9.5/interactive/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING> > PostgreSQL: Documentation: 9.5: Control Structures > <http://www.postgresql.org/docs/9.5/interactive/plpgsql-control-structures.html#PLPGSQL-STATEMENTS-RETURNING> > www.postgresql.org > 40.6. Control Structures. Control structures are probably the most useful > (and important) part of PL/pgSQL. With PL/pgSQL 's control structures, you > can manipulate ... > > > saludos > > > 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> >> 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 >> >> > > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> > Este > correo electrónico se ha enviado desde un equipo libre de virus y protegido > por Avast. > www.avast.com > <https://www.avast.com/sig-email?utm_medium=email&utm_source=link&utm_campaign=sig-email&utm_content=emailclient> >