Skip site navigation (1) Skip section navigation (2)

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 (view raw or flat)
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

pgsql-es-ayuda by date

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

Privacy Policy | About PostgreSQL
Copyright © 1996-2014 The PostgreSQL Global Development Group