Criando Stored Procedures que retornam um select

12/01/2018

0

Oi amigos, blz!?

Tenho uma Tabela de Mov. de Caixa com os seguintes campos:
CODIGO INTEGER
DTMOV DATE
TIPOMOV VARCHAR(1)
VLRMOV NUMERIC(12,2)


Essa tabela controla todo o movimento de entrada e saída de caixa diariamente onde o campo TIPOMOV pode ser 'E' para entradas no caixa e 'S' para saídas no caixa.

Eu vi alguns exemplos em fóruns de Stored Procedures que retornam um select onde me mostram o saldo do caixa por movimento. Eu na verdade informaria o saldo inicial e a Stored Procedure se encarregaria de alimentar os campos baseado no saldo inicial.

Por exemplo, eu quero todos os movimentos de caixa do mês de dezembro de 2017.

Eu simplesmente chamaria a SP informando o saldo inicial e o período e me retornasse um select de todos esses movimentos e o último campo seria o saldo somando e subtraindo o valor de acordo com o tipo de movimento.

Alguém tem alguma dica pra me dar uma luz?

Grato desde já

Essa dúvida foi gerada a partir de um comentário no artigo 3. Usando Stored Procedures com Firebird e InterBase
Rodrigo Cardilo

Rodrigo Cardilo

Responder

Posts

16/01/2018

Ricardo Pestana


boa tarde Rodrigo,

Não sei se entendi bem o que vc escreveu, mas vê se assim não te dá uma direção...

CREATE DEFINER=`root`@`localhost` PROCEDURE `contacorrente`(saldo numeric)
BEGIN

declare tipomov_aux varchar(1);
declare done int default 0;
declare vl_saldo_final_aux, vl_aux numeric;

DECLARE meu_cursor CURSOR FOR (
select tipomov, vlrmov from testes.testenf order by dtmov, codigo
);

DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;

OPEN meu_cursor;

set vl_saldo_final_aux = saldo;

repeat
fetch meu_cursor into tipomov_aux, vl_aux;
if not done then
if tipomov_aux = 'E' then
set vl_saldo_final_aux = vl_saldo_final_aux + vl_aux;
else
set vl_saldo_final_aux = vl_saldo_final_aux - vl_aux;
end if;
end if;

until done end repeat;

select 0 as codigo, null as dtmov, 'saldo' as tipomov, saldo
union all
select codigo, dtmov, tipomov, vlrmov from testes.testenf
union all
select 0 as codigo, null as dtmov, 'saldo final' as tipomov, vl_saldo_final_aux;

END
Responder

17/01/2018

Rodrigo Cardilo

OI Ricardo,

Eu na verdade preciso dessa procedure para o Firebird. Acho que a linguagem que você usou não funciona no firebird.

Mesmo assim obrigado desde já.
Responder

22/01/2018

Emerson Nascimento

veja se esta SP te ajuda:

create or alter procedure saldomov (
datainicial date,
datafinal date,
saldoinicial numeric(15,2))
returns (
datamov date,
descricao varchar(50),
entradas numeric(15,2),
saidas numeric(15,2),
saldo numeric(15,2))
as
begin
select max(dtmov) from movcaixa
where dtmov <= :datainicial
into datamov;

descricao = 'SALDO INICIAL';
entradas = 0;
saidas = 0;
saldo = saldoinicial;
suspend;

descricao = '';

for select dtmov,
sum(case when tipomov='E' then vlrmov else 0 end) valore,
sum(case when tipomov='S' then vlrmov else 0 end) valors
from movcaixa
where dtmov between :datainicial and :datafinal
group by dtmov
order by dtmov
into :datamov, :entradas, :saidas
do begin
saldo = (saldo + entradas - saidas);
suspend;
end

datamov = null;
descricao = 'SALDO FINAL';
entradas = 0;
saidas = 0;
suspend;
end
Responder

Assista grátis a nossa aula inaugural

Assitir aula

Saiba por que programar é uma questão de
sobrevivência e como aprender sem riscos

Assistir agora

Utilizamos cookies para fornecer uma melhor experiência para nossos usuários, consulte nossa política de privacidade.

Aceitar