[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