Você mesmo está complicando tudo cara, simplesmente é mais fácil você jogar
uma varíavel ali no lugar daquele vt_d_lote (que provavelmente já é uma
variável) e fazer a verificação antes de escrever o comando SQL
 
se tiver sido informado o valor então vt_d_lote = x
senão
vt_d_lote = null
 
aqui embaixo vem o comando SQL
 
Mais simples do que escrever o comando SQL duas vezes, não?

  _____  

De: [EMAIL PROTECTED]
[mailto:[EMAIL PROTECTED] Em nome de saulo Mendes
Enviada em: quarta-feira, 21 de fevereiro de 2007 14:38
Para: Grupo de Usuários do PostgreSQL no Brasil
Assunto: Re: [PostgreSQL-Brasil] dúvida com "null"


:) vou tentar explicar melhor:

veja...eu tenho um parâmetro que eu informo ao executar a função(no caso é o
vt_d_lote)
se eu informar o lote então a soma e feita com o lote que eu informar,
caso eu informe "null" no parâmetro então a soma é feita com os lotes
nullos.





  _____  

From: [EMAIL PROTECTED]
To: [email protected]
Date: Wed, 21 Feb 2007 15:31:55 -0300
Subject: Re: [PostgreSQL-Brasil] dúvida com "null"


 Bem nesse caso, você pretende filtrar os lotes quando a variável não for
nula
OU filtrar tudo se a variável for nula. ok?
 
 
     select coalesce(sum(ie.qt_entrada*up.vr_fator), 0)
     from tb_itentrada_prod ie
     inner join tb_unid_produto up on (up.c_unid_produto =
ie.c_unid_produto)
                                  and (up.d_unidade in ('E','A'))
     inner join tb_entrada_prod e on (ie.c_entrada_prod = e.c_entrada_prod)
                                 and (e.c_estoque = in_c_estoque)
                                 and (to_timestamp(e.dt_emissao||'
'||e.hr_entrada, 'YYYY-MM-DD HH24:MI:SS') >
                                      coalesce(v_hr_inventario,'1900-02-20
11:18:14-03'))
   where (ie.c_produto = in_c_produto)
     and ( (vt_d_lote is not null and ie.d_lote = vt_d_lote)
        or (vt_d_lote is null)
      )
 
--

----- Original Message ----- 
From: saulo  <mailto:[EMAIL PROTECTED]> Mendes 
To: Grupo de Usuários do PostgreSQL  <mailto:[email protected]>
no Brasil 
Sent: Wednesday, February 21, 2007 2:08 PM
Subject: Re: [PostgreSQL-Brasil] dúvida com "null"



Esse é o meu grande problema: esse select não deve somar os lotes nulos e
não-nulos. 
Na verdade essa é uma função onde eu informo o produto(in_c_produto) o
estoque (in_c_estoque) e o lote(vt_d_lote).
Esse comando deve realizar essa operação conforme o lote informado(se é nulo
ou não). 
O que eu queria fazer era, justamente, evitar reescrever o sql apenas por
causa do lote.

entendeu?



  _____  

From: [EMAIL PROTECTED]
To: [email protected]
Date: Wed, 21 Feb 2007 14:47:17 -0300
Subject: Re: [PostgreSQL-Brasil] dúvida com "null"


    Olá Saulo... Acho que pode ser isso aqui então:
 
select sum(tabela.valortotal) as TOTAL_GELAL
from (select coalesce(sum(ie.qt_entrada*up.vr_fator),0) as valortotal
      from tb_itentrada_prod ie
      inner join tb_unid_produto up on (up.c_unid_produto =
ie.c_unid_produto)
             and (up.d_unidade in ('E','A'))
      inner join tb_entrada_prod e on (ie.c_entrada_prod = e.c_entrada_prod)
             and (e.c_estoque = in_c_estoque)
             and (to_timestamp(e.dt_emissao||' '||e.hr_entrada, 'YYYY-MM-DD
HH24:MI:SS') > coalesce(v_hr_inventario,'1900-02-20 11:18:14-03'))
      where (ie.c_produto = in_c_produto) and ie.d_lote is null
 
      union all
 
      select coalesce(sum(ie.qt_entrada*up.vr_fator),0) as valortotal
      from tb_itentrada_prod ie
      inner join tb_unid_produto up on (up.c_unid_produto =
ie.c_unid_produto)
             and (up.d_unidade in ('E','A'))
      inner join tb_entrada_prod e on (ie.c_entrada_prod = e.c_entrada_prod)
             and (e.c_estoque = in_c_estoque)
             and (to_timestamp(e.dt_emissao||' '||e.hr_entrada, 'YYYY-MM-DD
HH24:MI:SS') > coalesce(v_hr_inventario,'1900-02-20 11:18:14-03'))
      where (ie.c_produto = in_c_produto) and ie.d_lote = vt_d_lote
) tabela
 
** Descrevendo esse sql, Faço um select de todos os lotes nulos +  select de
todos os lotes = à vt_d_lote;
    Usando a Teoria de Sub-Selects.
 
    Assim, conforme você descreveu pode ter a chave vazia ou não e ele
somará as duas.
 
    Sidnei




----- Original Message ----- 
From: saulo  <mailto:[EMAIL PROTECTED]> Mendes 
To: Grupo de Usuários do  <mailto:[email protected]> PostgreSQL
no Brasil 
Sent: Wednesday, February 21, 2007 1:31 PM
Subject: Re: [PostgreSQL-Brasil] dúvida com "null"


 olá Sidnei, ainda não é isso


veja... o campo d_lote pode ser vazio ou não...mas ambos trazem resultados
diferentes
no caso o resultado dessa consulta (select
coalesce(sum(ie.qt_entrada*up.vr_fator),0)....)
varia se o campo for nulo ou não, se eu utilizar  (vt_d_lote is null or
ie.d_lote = vt_d_lote)
aí o resultado vai ficar incorreto. 




  _____  

From: [EMAIL PROTECTED]
To: [email protected]
Date: Wed, 21 Feb 2007 14:17:27 -0300
Subject: Re: [PostgreSQL-Brasil] dúvida com "null"


    Além disso.......
    Acho que não compreendi a sua pergunta no primeiro momento, mas o que
você pretende fazer pode ser assim:
 
where (ie.c_produto = in_c_produto) and (vt_d_lote is null or ie.d_lote =
vt_d_lote)
 
    Abraços
    Sidnei

----- Original Message ----- 
From: saulo Mendes <mailto:[EMAIL PROTECTED]>  
To: [email protected] 
Sent: Wednesday, February 21, 2007 1:07 PM
Subject: [PostgreSQL-Brasil] dúvida com "null"


Senhores,

em uma determinada função se eu comparar um valor de uma variável, e esta
contiver um valor nulo
a consulta não me traz o resultado. Gostaria de saber como equacionar isso
de forma não-redundante.

segue o trecho da consulta:

   select coalesce(sum(ie.qt_entrada*up.vr_fator),0)
    from tb_itentrada_prod ie inner join tb_unid_produto up
     on (up.c_unid_produto = ie.c_unid_produto) and (up.d_unidade in
('E','A'))
    inner join tb_entrada_prod e on (ie.c_entrada_prod = e.c_entrada_prod)
     and (e.c_estoque = in_c_estoque) and
    (to_timestamp(e.dt_emissao||' '||e.hr_entrada,
     'YYYY-MM-DD HH24:MI:SS') >
      coalesce(v_hr_inventario,'1900-02-20 11:18:14-03'))
    where (ie.c_produto = in_c_produto) and (ie.d_lote = vt_d_lote) <<<<
vt_d_lote é uma variável....se o valor dela for nulo(esse campo pode ser
nulo) a consulta não me traz o valor correto pois o postgres não entendeu
tipo, ie.d_lote = null.
    into vr_estoque_positivo;

a solução parcial que encontrei é, antes de consulta (select coalesce...) eu
testar se a variável é nula, caso seja eu reescrevo a função com o final
ie.d_lote is null. Eu gostaria de eliminar esse redundância.

agradeço, desde já.


  _____  

O Windows Live Spaces está aqui! Descubra como é fácil criar seu espaço na
Web e sua rede amigos. Confira! <http://spaces.live.com/signup.aspx>  

  _____  


_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios


  _____  

Ligue para os seus amigos grátis. Faça chamadas de PC-para-PC pelo
messenger-- GRÁTIS Experimente agora!
<http://get.live.com/messenger/overview>  

  _____  


_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios


  _____  

Descubra e experimente alguns novos serviços online no Windows Live Ideas
Experimente! <http://ideas.live.com>  

  _____  


_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios


  _____  

Obtenha o novo Windows Live Messenger! Experimente!
<http://get.live.com/messenger/overview>  
_______________________________________________
Grupo de Usuários do PostgreSQL no Brasil
Antes de perguntar consulte o manual
http://pgdocptbr.sourceforge.net/

Para editar suas opções ou sair da lista acesse a página da lista em:
http://pgfoundry.org/mailman/listinfo/brasil-usuarios

Responder a