[firebase-br] RES: Ajuda com SP

Ivan Guimarães Meirelles igmeirelles em gmail.com
Sex Fev 6 12:54:34 -03 2009


Olá Andrei...

Antes do select valor/1000 from... 
Acrescente a seguinte linha:

         despesas_jan = 0;

acho q isso resolve o problema...
Um abraço.
Ivan Meirelles.

-----Mensagem original-----
De: lista-bounces em firebase.com.br [mailto:lista-bounces em firebase.com.br] Em
nome de Andrei Luís
Enviada em: sexta-feira, 6 de fevereiro de 2009 11:13
Para: Firebase
Assunto: [firebase-br] Ajuda com SP

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
______________________________________________
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