Fala Galera!
Segue abaixo um exemplo que eu fiz depois de muita luta, que é uma função recursiva em plpgsql.
Função SQL Recursiva em Postgre
A idéia é bastante simples. Eu tenho uma tabela usuarios. Cada usuário pode ser pai ou filho de alguem, a função busca todos os níveis de uma árvore genealógica apartir da geração atual, ou seja, se eu procurar meu pai, o resultado vai ser meu pai e eu, e um filho caso eu tivesse.
Segue o exemplo:
CREATE OR REPLACE FUNCTION tree(integer)
RETURNS SETOF groups AS $BODY$
declare result record; child record;
temp record; begin select into
result * from users
where user_id = $1; if found then
for child in select distinct user_id from users
where parent_id = $1 loop for temp in select * from
tree(child.group_id) loop return next temp; end loop; e
nd loop; end if; return next result; end; $BODY$
LANGUAGE plpgsql VOLATILE COST 100 ROWS 1000;
ALTER FUNCTION tree(integer) OWNER TO postgres;
Pra quem entende de recursividade, vai logo perceber que esta lógica é tão simples que nem precisa explicação, e pra quem não entende, vou tentar explicar em poucas palavras esta função:
– Primeiro eu busco o pai e jogo na variável registro. Na sequência, eu busco os filhos, e pra cada filho, chamo novamente a função pra ver se ele tem filhos, e pra cada filho do filho também, e pra cada neto, …, veja que a função “se chama” até os filhos acabarem.
Bom, acho que é isto, se alguem ficou na dúvida, poste o comentário!
Valeu,
att
sanoj
; )