ok, nesse caso, só falta adicionar isso na última cláusula...
   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 and ie.d_lote =null)

Conforme o que você descreveu, isso deverá funcionar, a não ser que seu campo 
ie.d_lote não seja nulo em seu Banco de Dados.

ok!
  ----- Original Message ----- 
  From: saulo Mendes 
  To: Grupo de Usuários do PostgreSQL no Brasil 
  Sent: Wednesday, February 21, 2007 2:38 PM
  Subject: 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 Mendes 
      To: Grupo de Usuários do PostgreSQL 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 Mendes 
          To: Grupo de Usuários do 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 
              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! 

------------------------------------------------------------------

              _______________________________________________
              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! 

----------------------------------------------------------------------

          _______________________________________________
          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! 

--------------------------------------------------------------------------

      _______________________________________________
      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! 


------------------------------------------------------------------------------


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