[firebase-br] Caculo de saldo
Gamarra de Jesus Daniel
danielgamarradejesus em gmail.com
Qua Jan 25 10:24:12 -03 2012
Amigo, não compreendi para que serve o ultimo select, uma vez que a
variável saldo já obteve um valor.
Além do que o select leva em consideração as próprias variáveis.
Abraço
Em 24 de janeiro de 2012 16:39, Fabiano Lima <frguitar em bol.com.br> escreveu:
> Então, desfiz meus triggers e troquei a função de calculo do saldo para
> uma procedure.
> Porem estou com um problema para somar valores distintos pois tenho 3
> contas as quais tenho que ter o calculo do saldo independente)
> Na procedure abaixo eu obtenho o saldo inicial de acordo com o codigo da
> conta, mas na hora de calcular o saldo ele sempre esta fazendo a soma do
> credito menos a soma do debito, e ignorando o select onde obtenho o saldo
> anterior ao data_ini
>
> //// segue o codigo/////
>
>
> CREATE OR ALTER PROCEDURE SLD_CX(
> DATA_INI DATE,
> DATA_FIN DATE)
> RETURNS (
> R_LANC_ID INTEGER,
> R_CCONTA INTEGER,
> R_CCONTAB INTEGER,
> R_SALDO_INI NUMERIC(11,2),
> R_SALDO NUMERIC(11,2))
> AS
> DECLARE VARIABLE V_CREDITO NUMERIC(10,2);
> DECLARE VARIABLE V_DEBITO NUMERIC(10,2);
> DECLARE VARIABLE V_DATA TIMESTAMP;
> DECLARE VARIABLE V_SALDO_ANT_CRED NUMERIC(10,2);
> DECLARE VARIABLE V_SALDO_ANT_DEB NUMERIC(10,2);
> DECLARE VARIABLE V_SALDO NUMERIC(10,2);
>
> BEGIN
> FOR
> SELECT LANC_ID, CCONTA, DATA, CREDITO, DEBITO
> FROM LANC
> WHERE DATA BETWEEN :DATA_INI AND :DATA_FIN
> ORDER BY DATA
> INTO :R_LANC_ID, :R_CCONTA, :V_DATA, :V_CREDITO, :V_DEBITO
> DO
>
> BEGIN
>
> SELECT SUM (CREDITO) FROM LANC WHERE DATA < :DATA_INI AND CCONTA =
> CCONTA INTO :V_SALDO_ANT_CRED;
> SELECT SUM (DEBITO) FROM LANC WHERE DATA < :DATA_INI AND CCONTA =
> CCONTA INTO :V_SALDO_ANT_DEB;
>
> R_SALDO = (V_SALDO_ANT_CRED - V_SALDO_ANT_DEB);
>
> IF (R_SALDO IS NULL) THEN
>
> SELECT SALDO_INI, CCONTA FROM CADBANCO
> WHERE CCONTA = :R_CCONTA
> INTO :R_SALDO_INI, :R_CCONTAB;
>
> R_SALDO = R_SALDO_INI;
>
> BEGIN
>
> SELECT DISTINCT :R_SALDO + :V_CREDITO - :V_DEBITO
> FROM LANC WHERE (LANC_ID = :R_LANC_ID)
> AND (DATA = :V_DATA)
> AND (CCONTA = :R_CCONTAB)
> INTO :R_SALDO;
> SUSPEND;
>
> END
>
> END
>
> END
>
>
>
> Agradeço qualquer ajuda.
>
> Fabiano
>
> ______________________________________________
> FireBase-BR (www.firebase.com.br) - Hospedado em www.locador.com.br
> Para saber como gerenciar/excluir seu cadastro na lista, use:
> http://www.firebase.com.br/fb/artigo.php?id=1107
> Para consultar mensagens antigas: http://firebase.com.br/pesquisa
>
--
"Dai-me Senhor, a perseverança das ondas do mar, que fazem de cada recuo um
ponto de partida para um novo avanço."
Mais detalhes sobre a lista de discussão lista