Duvida com procedure -AB

03/03/2016

1

tenho uma procedure no firebird e gostaria de fazer o seguinte:
Depois de informar um periodo entre datas, ele me retornasse:

01/02/2016 a 31/03/2016

retornasse 01/2016,
02/2016,
03/2016

e que apartir daí, pudesse com esse resultado fazer meus selects.
vejam minha procedure
CREATE PROCEDURE MOVRESSUMO(
DATAI DATE,
DATAF DATE,
PFILIAL INTEGER)
RETURNS(
MES_ANO VARCHAR(7) CHARACTER SET NONE,
TOTAL_ENTRADA DOUBLE PRECISION,
TOTAL_CONSUMO DOUBLE PRECISION,
TOTAL_ATEND_FARMACIA INTEGER,
TOTAL_DEVOLUCAO DOUBLE PRECISION,
TOTAL_PERDAS DOUBLE PRECISION)
AS
begin

for

SELECT EXTRACT(MONTH FROM B.dtentrada) ||'/'|| EXTRACT(year FROM b.dtentrada),
coalesce(sum(b.qtdund*b.custund),0)

FROM estoque_lote B
where b.filial=:pfilial and b.dtentrada between :datai and :dataf

group by EXTRACT(MONTH FROM B.dtentrada), EXTRACT(year FROM b.dtentrada)

into :Mes_Ano, :Total_Entrada
DO
BEGIN

for
select coalesce(sum(a.qtd * a.custo),0) from consumopaciente a

where a.filial=:pfilial and
EXTRACT(MONTH FROM a.data) ||'/'|| EXTRACT(year FROM a.data)=:MES_ANO

group by EXTRACT(MONTH FROM a.data), EXTRACT(year FROM a.data)
into :Total_Consumo
do
begin

for select coalesce(count(c.paciente),0)
from regatfarmpac c
WHERE c.filial=:pfilial and c.paciente is not null and
eXTRACT(MONTH FROM c.data) ||'/'|| EXTRACT(year FROM c.data)=:MES_ANO

into :total_atend_Farmacia

do
begin
for select coalesce(sum(d.qtd * d.custo),0)
from perdas d
WHERE d.filial=:pfilial and d.tipomov='P' and
eXTRACT(MONTH FROM d.data) ||'/'|| EXTRACT(year FROM d.data)=:MES_ANO

into :Total_Perdas


do
begin
for select coalesce(sum(e.qtd * e.custo),0)
from perdas e
WHERE e.filial=:pfilial and e.tipomov='D' and
eXTRACT(MONTH FROM e.data) ||'/'|| EXTRACT(year FROM e.data)=:MES_ANO

into :total_devolucao

do

suspend;
end
end
end
end
end

ela funciona, porém se a primeira tabela não possuir movimentação no periodo especificado, todas as outras tbm não irão mostrar nada, por estarem dependendo da estrutura da primeira.
Responder