Em 17/09/08, J.F.C.Junior<[EMAIL PROTECTED]> escreveu:
> Prezados amigos desta conceituada comunidade
>
> Bom Dia!
>
> Tenho uma function que recebe 50 parâmetros, dentre eles, alguns podem ser
> nulos ou com valores, dependendo da situação, Então, para que eu não tenha
> que testar parâmetro por parâmetro e então apos, criar uma query dinâmica,
> resolvi utilizar o conceito do COALESCE(..., ...), entretanto quando o
> parâmetro é nulo o SELECT é executado, contudo não retorna linhas. Conforme
> o fragmento de código/sql abaixo:
>
> 1. SELECT *
> 2. FROM TB_USUARIOS USU
> 3. WHERE USU.DT_DEMISSAO_USU = COALESCE(p_dDT_DEMISSAO_USU,
> USU.ID_CODIGO_USU)
> 4. ORDER BY USU.ID_CODIGO_USU
>
> Neste caso, o campo USU.DT_DEMISSAO_USU na Tabela está NULL,
> O Parâmetro p_dDT_DEMISSAO_USU recebido pela Function está NULL também
>
> Logo: WHERE NULL = NULL não retorna registros.
>
> Peço por gentileza uma ajuda neste sentido, pois ficar testando campo a
> campo por meio de "IF ... " e ir montando linha a linha em uma variável e
> somente ao final executá-la por meio do comando " EXECUTE " torna-se
> inviável, pois tenho outras functions com mais de 50 parâmetros, ou seja, se
> eu conseguir resolver esta situação, posso usar a solução para todas as
> procedures que estão com o mesmo problema.
>
> Na certeza de poder contar mais uma vez com a ajuda de todos.
>
> Fico desde já muito agradecido.
>


Se o que deseja é considerar como verdadeiro quando "NULL = NULL"
(note que NULL nunca é igual a NULL) então utilize:
USU.DT_DEMISSAO_USU IS NOT DISTINCT FROM
COALESCE(p_dDT_DEMISSAO_USU,USU.ID_CODIGO_USU)

Veja:
http://www.postgresql.org/docs/current/interactive/functions-comparison.html

Osvaldo
PS: Não entendi sua expressão: se p_dDT_DEMISSAO_USU for NULL você
quer comparar USU.DT_DEMISSAO_USU com USU.ID_CODIGO_USU (uma data com
um código)?
_______________________________________________
pgbr-geral mailing list
[email protected]
https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral

Responder a