Maikel, a idéia da Tabela Historico é genial. Costumamos pensar nela como uma shadow-table que funciona como uma "lixeira" tudo que é feito na tabela principal, antes é registrado na tabela-sombra. Assim qualquer exclusão ou alteração indevida poderá ser "voltada" para trás (rolled-back). Mas isso é uma outra questão.
Foi boa sua colocação acerda da PK (um id auto-incremented) da tabela de lancamento. Estou dando uma estudada na escrita de Triggers com PL/pgSQL e mais tarde vou postar minha solução de atualização dos saldos. (fiz uma simulação de tabela aqui - baseado no que vc informou). MN. Em 22/02/07, Maikel Dal Farra <[EMAIL PROTECTED]> escreveu:
Como essa tabela tem um campo chamado id (serial) que é a pk, eu tava pensando em alterar os registros >= (data+id) do registro "mexido". Para efeito de relatório não deve alterar a data do lancamento, mas eu pensei em guardar essas alterações em outra tabela histórico. Que vc acha Marcos? Valeu. ------------------------------ From: *"marcos nobre" <[EMAIL PROTECTED]>* Reply-To: *Grupo de Usuários do PostgreSQL no Brasil< [email protected]>* To: *"Grupo de Usuários do PostgreSQL no Brasil"< [email protected]>* Subject: *Re: [PostgreSQL-Brasil] Atualização de campos* Date: *Thu, 22 Feb 2007 12:01:00 -0300* Opa, encaminhei sem querer. Naum completei minha dúvida, entaum segue denovo. Em 22/02/07, marcos nobre <[EMAIL PROTECTED] > escreveu: > > ok. > Seja qual for o lancamento que algum usuário estiver mexendo, o trigger > terá que ser disparado AFTER UPDATE e a programação ( o conteúdo) do trigger > com certeza faz acesso aos dados do registro que está sendo afetado (no > mínimo a PK do registro) daí tendo-se acesso a Data do Lancamento o barato é > desenvolver um UPDATE que atualize saldo de qualquer lançamento com data > superior à deste que foi "mexido". > > > Mas há 2 casos a se considerar (ainda): > a) O Saldos dos registros de mesma data a do registro que foi mexido; > b) O Saldos dos registros seguintes, ou seja, daqueles que tem data > superior a do registro que foi mexido. > > > Porém ainda resta uma dúvida: O programa (do teu sistema) que permite > que um lançamento seja modificado, permite inclusive que seja modificada > a data de um lançamento ? > Isso faz uma forte diferença porque determina que o trigger ao invés de recalcular saldo mediando entre antes e depois do lançamento, poderia fazer um recalculo geral ! Sacou ? Esse procedimento pode ser mais fácil de ser desenvolvido, bastando para tal fazer uma análise de custo x benefício, levando-se em consideração: 1) Será que este programa de Alteração de Lançamentos vai ser muito utilizado? 2) Porque não gerar um lançamento de mesma data com valor contrário (para matar/anular o errado) e inserir o lançamento correto ? Contabilmente isso é bem correto e em termos de sistema, fica bem documentado o erro de lançamento. 3) Quantos milhoes de lançamentos conterão essa tabela? E que tal fazer um recalculo de saldo a partir do dia 1 do mes do lançamento errado (isso diminui a agressividade do trigger) ? MN. Em 22/02/07, > Maikel Dal Farra > <[EMAIL PROTECTED]> escreveu: > > > > Caro Marcos Nobre > > Isso mesmo, a tabela é assim. Como o Wallace disse acho que seria um > trigger, mas a minha dúvida era em como atualizar somente os saldos após o > lançamento, não mexendo nos saldos anteriores, ou seja, uma forma de > corrigir um lançamento errado, entendem? > > Obrigado pelo retorno de vcs. > > ------------------------------ > From: *"marcos nobre" < > [EMAIL PROTECTED]>* > Reply-To: *Grupo de Usuários do PostgreSQL no Brasil<[email protected] > > >* > To: *"Grupo de Usuários do PostgreSQL no Brasil"<[email protected] > * > *>* > Subject: *Re: [PostgreSQL-Brasil] Atualização de campos* > Date: *Thu, 22 Feb 2007 10:34:34 -0200* > > Xovê se entendi. Pelo que parece em sua tabela de lançamentos, cada linha (lancamento em sí) traz o "saldo até então", algo do tipo data-----lcmto---D_C-----saldo 04/02---10,00---C---------10,00 04/02---8,00-----C---------18,00 04/02---1,00-----D---------17,00 05/02---4,00-----C---------21,00 08/02---1,00-----C---------22,00 08/02---18,00---D---------4,00 09/02---20,00---C---------24,00 Se for esse o caso, estou pensando em um DML para te encaminhar. Caso não seja, esclareça melhor essa tua tabela de lançamentos. Imaginei que tua tabela deva conter uma data e que possa existir lançamentos a debito e a credito. MN. Em 22/02/07, Wallace Reis < <[EMAIL PROTECTED]> [EMAIL PROTECTED]> escreveu: > -----BEGIN PGP SIGNED MESSAGE----- Hash: SHA1 Maikel Dal Farra wrote: > Boa tarde, gostaria que alguém me ajudasse com um probleminha.. > Tenho um tabela chamada CADSALDO com os seguintes campos: > lancamento - numeric (7,2) e valorsaldo - numeric (7,2), (onde o > saldo anterior é a soma do saldo atual com o lancamento), preciso que > ao corrigir um lançamento qualquer na tabela,todos os valorsaldo abaixo > deste lancamento sejam recalculados. Um trigger de UPDATE resolve, nao? * http://www.postgresql.org/docs/8.2/interactive/triggers.html * http://www.postgresql.org/docs/8.2/interactive/sql-createtrigger.html - -- wallace reis Núcleo de Biologia Computacional e Gestão de Informações Biotecnológicas/LABBI -----BEGIN PGP SIGNATURE----- Version: GnuPG v1.4.6 (GNU/Linux) iD8DBQFF3Yb0LZIH+ybRHUMRAscFAKCrNZGuvfIrWtzRysRlAdRKCwvFnQCggtuS yEaKc1HltqbdRAw2bCvAMOE= =dmWF -----END PGP SIGNATURE----- _______________________________________________ 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 -- Consultor em TI Eng. Sistemas ---------------------------------------------- Keep in your mind: MS give us Windows, Linux gives us the whole House. >_______________________________________________ >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 ------------------------------ Seja um dos primeiros a testar o novo Windows Live Mail Beta - grátis Acesse <http://g.msn.com/8HMABRBR/2734??PS=47575> e inscreva-se agora! _______________________________________________ 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 -- Consultor em TI Eng. Sistemas ---------------------------------------------- Keep in your mind: MS give us Windows, Linux gives us the whole House. -- Consultor em TI Eng. Sistemas ---------------------------------------------- Keep in your mind: MS give us Windows, Linux gives us the whole House. >_______________________________________________ >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 ------------------------------ O Windows Live Spaces é seu espaço na internet com fotos (500 por mês), blog e agora com rede social. Particpe também!<http://g.msn.com/8HMABRBR/2746??PS=47575> _______________________________________________ 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
-- Consultor em TI Eng. Sistemas ---------------------------------------------- Keep in your mind: MS give us Windows, Linux gives us the whole House.
_______________________________________________ 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
