From: | Luis Guevara <luis(dot)a(dot)guevara(at)gmail(dot)com> |
---|---|
To: | Jaime Casanova <systemguards(at)gmail(dot)com> |
Cc: | PostgreSQL-foro <pgsql-es-ayuda(at)postgresql(dot)org> |
Subject: | Re: Ayuda en consulta complicada |
Date: | 2006-01-20 16:38:20 |
Message-ID: | fa2b6e3a0601200838v435ff6a9y@mail.gmail.com |
Views: | Raw Message | Whole Thread | Download mbox | Resend email |
Thread: | |
Lists: | pgsql-es-ayuda |
Gracias Jaime:
Ya compilé. pero al llamar a la función con
select * from test(2)
me devuelve el siguiente error:
ERROR: wrong record type supplied in RETURN NEXT
CONTEXT: PL/pgSQL function "test" line 12 at return next
Al parecer hay un error con el tipo de dato que devuelve RECORD, porque no
va a devolver un solo registro sino varios registros.
La función ha quedado compilada así:
CREATE OR REPLACE FUNCTION "public"."test" (integer) RETURNS SETOF
"public"."dependencia" AS
$body$
declare
foo record;
begin
select into foo depe_id, depe_nombre, depe_depeid
from dependencia
where depe_id = $1;
if not found then
return;
end if;
return next foo;
if foo.depe_depeid is not null then
for foo in select depe_id, depe_nombre, depe_depeid
from test(foo.depe_depeid) loop
return next foo;
end loop;
end if;
return;
end
$body$
LANGUAGE 'plpgsql' VOLATILE CALLED ON NULL INPUT SECURITY INVOKER;
¿Cómo podría arreglar esto?
Gracias por su apoyo.
El día 20/01/06, Jaime Casanova <systemguards(at)gmail(dot)com> escribió:
>
> On 1/20/06, Luis Guevara <luis(dot)a(dot)guevara(at)gmail(dot)com> wrote:
> > Gracias Alvaro,
> >
> > Estoy compilando la función y ya corregí unas cuantas comas pero ahora
> me
> > sale el siguiente error al compilar
> >
> > ERROR: syntax error en o cerca de «select»
> >
> > Solo se que hay un error en el SELECT que se encuentra dentro del FOR,
> pero
> > no lo ubico.
> >
> > Por favor espero que puedas ayudarme.
> >
> > Gracias
>
>
> if foo.depende is not null then
> - for select into foo depe_id, descripcion, depende
> + for foo in select depe_id, descripcion, depende
> from func(foo.depende) loop
> return next foo;
> end loop;
> end if;
>
>
> saca la linea marcada con (-) y cambiala por la linea marcada con (+)
>
>
> --
> Atentamente,
> Jaime Casanova
> (DBA: DataBase Aniquilator ;)
>
--
atte.
Luis Guevara
From | Date | Subject | |
---|---|---|---|
Next Message | Jaime Casanova | 2006-01-20 17:05:27 | Re: Ayuda en consulta complicada |
Previous Message | Jaime Casanova | 2006-01-20 16:25:08 | Re: Ayuda en consulta complicada |