Re: Ayuda en consulta complicada

From: Alvaro Herrera <alvherre(at)alvh(dot)no-ip(dot)org>
To: Luis Guevara <luis(dot)a(dot)guevara(at)gmail(dot)com>
Cc: PostgreSQL-foro <pgsql-es-ayuda(at)postgresql(dot)org>
Subject: Re: Ayuda en consulta complicada
Date: 2006-01-20 14:35:54
Message-ID: 20060120143554.GA4859@surnet.cl
Views: Raw Message | Whole Thread | Download mbox | Resend email
Thread:
Lists: pgsql-es-ayuda

Luis Guevara escribió:
> Hola Amigos:
>
> Tengo la siguiente tabla Dependencia:
>
> depe_id Descipcion Depende
> 1 AAAAA Null
> 2 bbbbbb Null
> 3 xxxxxx Null
> 4 yyyyyyyy 2
> 5 zzzzzzz 4
>
> Quiero crear un procedimiento al cual le envíe como parámetro el depe_id y
> me devuelva todos los registros que
> dependen de ese depe_id. Por ejm si llamo a la función así:
> select * from myfuncion(2)
> que me devuelva el siguiente cursor:
>
> depe_id Descipcion Depende
> 2 bbbbbb Null
> 4 yyyyyyyy 2
> 5 zzzzzzz 4

Creo que lo mas sencillo seria una funcion recursiva, algo asi (ojo, no
he probado que este correcta. Ni siquiera se si compila. Haz las
correcciones necesarias y despues nos la envias de vuelta):

create function func(int) returns setof dependencia language plpgsql as
$$
declare
foo record;
begin;
select into foo depe_id, descripcion, depende
from dependencia
where depe_id = $1;

if not found
return;
end if;

if (foo.depe_id = foo.depende) then
raise exception 'soy un idiota';
end if;

return next foo;

if foo.depende is not null then
for select into foo depe_id, descripcion, depende
from func(foo.depende) loop
return next foo;
end loop;
end if;

return;
end;
$$;

--
Alvaro Herrera http://www.amazon.com/gp/registry/CTMLCN8V17R4
"The Postgresql hackers have what I call a "NASA space shot" mentality.
Quite refreshing in a world of "weekend drag racer" developers."
(Scott Marlowe)

In response to

Responses

Browse pgsql-es-ayuda by date

  From Date Subject
Next Message Luis Guevara 2006-01-20 15:42:04 Re: Ayuda en consulta complicada
Previous Message Mauricio Delgado 2006-01-20 14:35:01 postgresql 8 1x con crystal reports 7 pro.