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
