Ir para conteúdo

POWERED BY:

Arquivado

Este tópico foi arquivado e está fechado para novas respostas.

Alisson Nunes da Rocha

SQL Recursiva - POSTGRES

Recommended Posts

Bom dia galera, primeiramente pedir desculpa por criar o topico em categoria diferente (mysql), não conseguir criar em OUTROS BANCOS....

 

Mas vamos ao problema, tenho uma tabela chamada:

saldo_oog_item com os seguintes dados:

 

 

banco.jpg

 

 

Estou utilizando o postgres 8.1, gostaria de fazer uma consulta recursiva, só que não conseguir achar nada na net que satisfaça minha consulta, alguém com experiência neste tipo de consulta poderia me ajudar.

 

Gostaria de somar todo valor do registro: 3769 e seus pais: 3704 e 1669, será que conseguir passar o problema para vocês me ajudar? aguardo contato e obrigado desde já!

Compartilhar este post


Link para o post
Compartilhar em outros sites

Olá Alisson, Bom Dia!

 

Me chamo Marcos e já tive o mesmo problema que você. Tenho um sistema com banco de dados Postgres 8.1 e todas as soluções na internet são para versões acima deste... Trabalho na www.hostion.com.br e temos um DBA que me ajudou na seguinte solução:

 

Você vai criar essa essa função, depois basta chamar com ID que deseja.

 

create or replace function fn_soma_itens_saida (v_item_despesa_pai int4)

returns numeric(11,2)

as $$

declare

v_soma numeric(11,2); -- Variavel para armazenar a soma parcial por item de despesa.

v_registro_filho int4; -- Variavel para obter o registro filho do registro atual.

begin

-- Obtem a soma dos valores de item de saida para o item de despesa atual.

select sum(valor) into v_soma from sisdoc_v2.pec_itens_saida where cod_itens_oog = v_item_despesa_pai;

 

-- Obtem o registro filho do registro atual.

select cod_item_oog_anterior into v_registro_filho from sisdoc_v2.oog_item_despesa where cod_item_despesa = v_item_despesa_pai;

 

if (v_registro_filho is null) then -- Se nao existe registro filho, entao retorna somente a soma correspondente ao item de desepesa atual.

return v_soma;

else -- Se existe registro filho entao ...

return v_soma + fn_soma_itens_saida(v_registro_filho); -- retorna a soma do registro atual mais a soma dos registros filhos (utiliza recursividade de função).

end if;

end;

$$ LANGUAGE plpgsql;

 

 

Porfavor, teste e me responda aqui se resolveu sua vida... se nao der me avisa... que vamos resolver seu problema!

 

Abração

Marcos - hostion.com.br

Compartilhar este post


Link para o post
Compartilhar em outros sites

Opz, não tinha percebido que este tópico tinha sido criado no lugar errado .. estarei movendo para 'Outros Bancos'.

Movido de MySQL :seta: Outros Bancos de Dados

 

http://forum.imasters.com.br/topic/454765-sql-recursiva-postgres/

Compartilhar este post


Link para o post
Compartilhar em outros sites

×

Informação importante

Ao usar o fórum, você concorda com nossos Termos e condições.