[firebase-br] Ajuda com SP

Andrei Luís compuvale.software em gmail.com
Sex Fev 6 12:12:58 -03 2009


Olá a todos,

Preciso de uma luz, tô quase ficando louco.

Estou utilizando FB 1.5.5

Considerem a SP abaixo. Os selects fazem parte de uma outra procedure maior
(bem maior), e só estou com problema nesse trecho do código, separei numa sp
menor para testar.


CREATE OR ALTER PROCEDURE PROC_TESTE ( ano integer, wfilial_entrada integer)
returns ( wano integer, wfilial varchar(40), wfilial_id integer,
despesas_jan numeric(9,2), despesas_jan2 numeric(9,2))
as
begin
   for Select registro_id, filial from filiais  where boletoavulso='N' and
boletoterrenos='N'
        into :wfilial_id, :wfilial do
      begin
         wano = :ano;

         -- este é o select original que está na SP
         select valor/1000 from despesas_filiais where filial_id=:wfilial_id
and extract(month from data)=1 and extract(year from data)=:ano into
:despesas_jan;

         -- este select e o insert coloquei somente para testar
         select valor/1000 from despesas_filiais where
filial_id=:wfilial_entrada and extract(month from data)=1 and extract(year
from data)=:ano into :despesas_jan2;

         insert into tbtmp (ano, filial, filial_id, despesa_jan) values
(:ano, :wfilial, :wfilial_id, Coalesce(:despesas_jan, 0));

        suspend;
     end
end^


Bem, o FOR SELECT, traz o pk da tabela filiais e joga na variável wfilial_id
pra ser usado depois. O problema é que o select valor.... tá trazendo
resultado errado.

Tabela filiais
registro_id    filial
1                 A
2                 B
3                 C
4                 D
5                 E

Tabela despesas_filiais
data              filial_id     valor
01/01/2008    1              10
01/01/2008    3              20
01/01/2008    5              30


a procedure acima está retornando o seguinte, entrando com os parametros
ano=2008 e wfilial_entrada=2:

wano    wfilial     wfilial_id    despesas_jan    despesas_jan2
2008      A           1               10                       null
2008      B           2               10                       null
2008      C           3               20                       null
2008      D           4               20                       null
2008      E           5               30                       null

Ou seja, qdo não tem um registro lançado em despesas_filiais, despesas_jan
está mantendo o valor anterior ao inves de armazenar null. Como que é isso?
Porque os resultados de despesas_jan e despesas_jan2 estão diferentes se a
cláusula where é igual, só muda o nome do parametro?

Já tentei colocar um coalesce e deu no mesmo:

select Coalesce(valor, 0)/1000 from despesas_filiais where
filial_id=:wfilial_id and extract(month from data)=1 and extract(year from
data)=:ano into :despesas_jan;


Qualquer ajuda é bem vinda.


[]s
Andrei



Mais detalhes sobre a lista de discussão lista