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