[firebase-br] Ajuda em stored procedure

Eduardo Jedliczka edujed em gmail.com
Seg Maio 30 08:47:43 -03 2011


Complementando...

talvez  seja melhor (mais simples e rápido) fazer algo do tipo:

   select cc.dt_cadastro, cc.mov, sum(cc.valor) total
from controle_conta cc
where    cc.tipo_mov = 'C'   and    cc.id_empresa = :empresa cc.and
dt_cadastro between :pdataini and :pdatafim
group by cc.dt_cadastro, cc.mov

==========================
Eduardo Jedliczka
Apucarana - Pr
==========================



2011/5/30 Eduardo Jedliczka <edujed em gmail.com>
>
> Sua Lógica está errada...
>
> Você está somando os valores para cada registro da tabela controle_conta.
>
> Refaça o seu for select para algo do tipo:
>
>  FOR
>
>    select Distinct  cc.dt_cadastro
>       from
>
>       controle_conta cc
>
>     WHERE
>
>    cc.dt_cadastro between :pdataini and :pdatafim
>
>     and cc.id_empresa = :empresa
>
>     order by cc.dt_cadastro
>
>    INTO :data
>
>      DO
>
>  BEGIN
>
>    select coalesce(sum(cc.valor),0)as margProdTerc from controle_conta cc
> where cc.mov   = 'X' and cc.tipo_mov = 'C'
> and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
> into  :margProdTerc;
>
>     select coalesce(sum(cc.valor),0)as prodTerc     from controle_conta cc
> where cc.mov   = 'T' and cc.tipo_mov = 'C'
> and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
> into :prodTerc;
>
>   select coalesce(sum(cc.valor),0)as Tarifacao    from controle_conta cc
> where cc.mov   = 'F' and cc.tipo_mov = 'C' ),
> and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
> into       :Tarifacao;
>
>   select coalesce(sum(cc.valor),0)as cobraDia     from controle_conta cc
> where cc.mov   = 'I' and cc.tipo_mov = 'C' ),
> and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
> into     :cobraDia;
>
>     select coalesce(sum(cc.valor),0)as cambista     from controle_conta cc
> where cc.mov   = 'A' and cc.tipo_mov = 'C' )
> and    cc.dt_cadastro=:data and cc.id_empresa = :empresa
> into         :cambista;
>
>
>   SUSPEND;
>
> END
>
>
>
> ==========================
> Eduardo Jedliczka
> Apucarana - Pr
> ==========================
>
>
>
> 2011/5/29 Jose Luiz de Medeiros <joseluiz em digitoneletronica.com.br>
>>
>> Colegas, boa noite.
>>
>>
>>
>> Criei um SP para pegar resultados de uma tabela separando por tipo, ela me
>> traz as linhas de acordo com a data. Mas os valores se repetem, o que fiz de
>> errado?
>>
>>
>>
>> CREATE PROCEDURE SP_REL_CAIXA (
>>
>>    pdataini date,
>>
>>    pdatafim date,
>>
>>    empresa integer)
>>
>> returns (
>>
>>    data date,
>>
>>    margprodterc numeric(18,2),
>>
>>    prodterc numeric(18,2),
>>
>>    tarifacao numeric(18,2),
>>
>>    cobradia numeric(18,2),
>>
>>    cambista numeric(18,2)
>>
>>    )
>>
>> as
>>
>> begin
>>
>>  FOR
>>
>>    select  cc.dt_cadastro,
>>
>>     (select coalesce(sum(cc.valor),0)as margProdTerc from controle_conta cc
>> where cc.mov   = 'X' and cc.tipo_mov = 'C' ),
>>
>>     (select coalesce(sum(cc.valor),0)as prodTerc     from controle_conta cc
>> where cc.mov   = 'T' and cc.tipo_mov = 'C' ),
>>
>>     (select coalesce(sum(cc.valor),0)as Tarifacao    from controle_conta cc
>> where cc.mov   = 'F' and cc.tipo_mov = 'C' ),
>>
>>     (select coalesce(sum(cc.valor),0)as cobraDia     from controle_conta cc
>> where cc.mov   = 'I' and cc.tipo_mov = 'C' ),
>>
>>     (select coalesce(sum(cc.valor),0)as cambista     from controle_conta cc
>> where cc.mov   = 'A' and cc.tipo_mov = 'C' )
>>
>>       from
>>
>>       controle_conta cc
>>
>>     WHERE
>>
>>    cc.dt_cadastro between :pdataini and :pdatafim
>>
>>     and cc.id_empresa = :empresa
>>
>>     group by cc.dt_cadastro
>>
>>    INTO :data,
>>
>>         :margProdTerc,
>>
>>         :prodTerc,
>>
>>         :Tarifacao,
>>
>>         :cobraDia,
>>
>>         :cambista
>>
>>          DO
>>
>>  BEGIN
>>
>>   SUSPEND;
>>
>> END
>>
>>
>>
>> end
>>
>> ______________________________________________
>> 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
>




Mais detalhes sobre a lista de discussão lista