Fórum SP com problema na atualização #53673
29/10/2005
0
saldo = 0;
for select data_mov, historico,entrada, saida
from mov_caixa
into :data_mov, :historico, :entrada, :saida do begin
saldo = saldo + entrada-saida;
suspend;
end
end
Se eu dou um select * from sp, beleza, funciona como eu quero, mas se eu dou um select * from sp where data_mov between :data1 and :data2, o select vem, mas o saldo que deveria ser somente no periodo selecionado não vem, vem o saldo total, de toda a tabela. Sei que eu deveria reescrever minha SP, mas não sei como.
Paulo
Curtir tópico
+ 0Posts
31/10/2005
Firekiller
1. Sua SP ficaria a mesma.
2. Você criaria uma view assim:
CREATE VIEW MYVIEW (data_mov, historico,entrada, saida, saldo)
as
SELECT data_mov, historico,entrada, saida, saldo from sp;
3. Utilizaria a view em seus SQL´s:
select * from MYVIEW where data_mov between :data1 and :data2
Gostei + 0
31/10/2005
Paulo
Gostei + 0
31/10/2005
Firekiller
Mas sendo assim, creio eu que não será o suficiente você alterar sua procedure, pois o valor de saldo inicia zerado, portanto creio eu que ele não irá bater ao tentar pegar esse valor. O que poderia ser feito, pelo menos na minha opinião, é aproveitarmos a idéia que eu tinha utilizado anteriormente, só que, ao invés de criar uma view, criar uma outra procedure, e então fazer o filtro nessa procedure. Não sei se irá funcionar. Mas qualquer coisa, entra em contato com o AFarias, que ele manja muito de IB/FB.
Gostei + 0
31/10/2005
Gandalf.nho
select historico, (sum(entrada) - sum(saida)) as saldo from mov_caixa where data_mov between :data1 and :data2 group by historico
Gostei + 0
01/11/2005
Paulo
Gostei + 0
01/11/2005
Gandalf.nho
Gostei + 0
01/11/2005
Paulo
Gostei + 0
01/11/2005
Firekiller
Uma forma de você sair desse problema, sem ter que usar uma segunda procedure, seria você ter um campo na tabela chamado saldo. E utilizar uma trigger (before insert or update), para calcular esse valor. Dessa forma você não terá que ficar criando 2, 3, 4 ou 30 procedures.
Gostei + 0
02/11/2005
Paulo
Gostei + 0
Clique aqui para fazer login e interagir na Comunidade :)