Já implementei exatamente o mesmo caso no InterBase utilizando triggers e stored procedures.
Bom, em PostgreSQL isso pode ser resolvido sem cursores e em linguagem PL/pgSQL. 1) busque o valor do saldo anterior ao lançamento a ser alterado: SELECT saldo FROM tabela WHERE id < 2 ORDER BY id DESC LIMIT 1; 2) faça um laço de iteração com o lançamento em questão e os posteriores: SELECT id, lancamento FROM tabela WHERE id >= 2 ORDER BY id; 3) para cada repetição, recalcule o saldo e altere na tabela: UPDATE tabela SET saldo = var_saldo WHERE id = var_id; Eis outra solução (mais rápida). 1) calcule a diferença de valores entre o lançamento a ser alterado e o novo valor: SELECT novo_lancamento - lancamento AS diferenca FROM tabela WHERE id = 2; 2) altere somente o valor do lançamento: UPDATE tabela SET lancamento = novo_lancamento WHERE id = 2; 3) altere todas as linhas a partir do lançamento em questão para o novo saldo; UPDATE tabela SET saldo = saldo + diferenca WHERE id >= 2; -- Atenciosamente, Rodrigo Hjort Icewall Tecnologias http://www.icewall.com.br 2007/3/1, Maikel Dal Farra <[EMAIL PROTECTED]>:
tenho uma tabela como a que segue abaixo: id(serial) saldo(numeric 7,2) lancamento (numeric 7,2) 1 1000 1000 2 500 -500 3 2000 1500 Preciso de uma função que "corria um lancamento", por exemplo passando o id 2 e o um novo_lancamentor 1000, a tabela ficaria: id(serial) saldo(numeric 7,2) lancamento (numeric 7,2) 1 1000 1000 2 2000 1000 3 3500 1500 O problema é que para o cálculo do saldo atual precisa-se do saldo anterior, tentei usar cursores para pegar valores anteriores da tabela, mas não consegui. Se alguém puder me dar uma luz para esse problema eu ficaria imensamente grato.
_______________________________________________ Grupo de Usuários do PostgreSQL no Brasil Antes de perguntar consulte o manual http://pgdocptbr.sourceforge.net/ Para editar suas opções ou sair da lista acesse a página da lista em: http://pgfoundry.org/mailman/listinfo/brasil-usuarios
