Hola Alberto las funciones que devuelven RECORD es bueno y necesario castear el resultado con as (...):
intenta haciendo:
SELECT * from f_xconsulta('01') as (campo1 CHAR(2), campo2 VARCHAR(20));


saludos

On 19/01/16 12:46, Alberto Cuevas wrote:
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.


-
Enviado a la lista de correo pgsql-es-ayuda (pgsql-es-ayuda@postgresql.org)
Para cambiar tu suscripci�n:
http://www.postgresql.org/mailpref/pgsql-es-ayuda

Responder a