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