A função COALESCE permite que se selecione, entre dois ou mais parâmetros, o primeiro valor não nulo, retornando nulo caso todos os valores passados como parâmetro sejam nulos. É um recurso que pode ser utilizado para dar mais elegância ao tratamento de valores nulos e ao mesmo tempo reduzir o tamanho das consultas, tornando-as mais fáceis de manter.
A sintaxe é bem simples, pois a função COALESCE recebe uma lista de valores como parâmetro, separados por vírgula.
Exemplo 1: Apenas um parâmetro fornecido
postgres=# SELECT COALESCE(1);
coalesce
----------
1
(1 registro)
Exemplo 2: Dois parâmetros fornecidos
postgres=# SELECT COALESCE(null,2);
coalesce
----------
2
(1 registro)
Exemplo 3: Três parâmetros fornecidos
postgres=# SELECT COALESCE(1,2,3);
coalesce
----------
1
(1 registro)
Exemplo 4: O primeiro parâmetro é nulo.
postgres=# SELECT COALESCE(null,2,3);
coalesce
----------
2
(1 registro)
Exemplo 5: Os dois primeiros parâmetros são nulos.
postgres=# SELECT COALESCE(null,null,3);
coalesce
----------
3
(1 registro)
Exemplo 6: Exemplo com cinco parâmetros e valor do tipo data.
postgres=# SELECT COALESCE(null, null, null, null, current_date);
coalesce
------------
2014-05-02
(1 registro)
Exemplo 7: Exemplo utilizando campos de uma tabela como parâmetro.
postgres=# CREATE TEMP TABLE TBL_COA(campo1 INTEGER, campo2 INTEGER, campo3 INTEGER);
postgres=# INSERT INTO TBL_COA VALUES (null,1,2);
postgres=# INSERT INTO TBL_COA VALUES (null,null,2);
postgres=# INSERT INTO TBL_COA VALUES (null,null,null);
postgres=# SELECT COALESCE(campo1,campo2, campo3) FROM TBL_COA;
coalesce
----------
1
2
(3 registros)
Exemplo 8: Implementação das condições do exemplo anterior utilizando a cláusula CASE. O plano de execução é o mesmo, mas o código fica bem mais complexo.
postgres=# SELECT
postgres-# CASE WHEN campo1 IS NOT NULL THEN campo1
postgres-# WHEN campo1 IS NULL AND campo2 IS NOT NULL THEN campo2
postgres-# WHEN campo1 IS NULL AND campo2 IS NULL AND campo3 IS NOT NULL THEN campo3
postgres-# ELSE null END AS simula_coalesce
postgres-# FROM TBL_COA;
simula_coalesce
-----------------
1
2
(3 registros)
* Conclusões
- O uso de COALESCE pode tornar seu código mais enxuto e fácil de manter;
- Pode substituir a cláusula CASE no tratamento de valores NULOS, embora não haja ganho de desempenho.
Um comentário:
Muito útil... obrigado! Vou seguir seu blog a partir de agora. Tem bastante dica boa! Parabéns!
Postar um comentário