Usamos cookies para medir audiência e melhorar sua experiência. Você pode aceitar ou recusar a qualquer momento. Veja sobre o iMasters.
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:
/applications/core/interface/imageproxy/imageproxy.php?img=http://www.linelove.com.br/banco.jpg&key=71c6567e6e61a1147c6e625e6c71e0972d68a4679af14e2ca733eeced075f640" alt="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á!
Pois eh, eu já tinha visto esse recurso do postgres, mas pelo que vi, só funciona no postgres 8.4 pra cima.... Estou utilizando o postgres 8.1... f*** :(
Migra ...
:)
Falar é fácil, sei...
Obrigado pela ajuda... :) Se eu conseguir aqui deixo a solução!
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
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/
No Oracle existe o CONNECT BY, para o "putzgrila" achei isto.