No banco de dados Oracle, o
COALESCE()
A função retorna a primeira expressão não nula da lista de expressões. Sintaxe
A sintaxe fica assim:
COALESCE(expr [, expr ]...)
Pelo menos duas expressões devem ser passadas.
Exemplo
Segue um exemplo para demonstrar:
SELECT COALESCE(null, 7)
FROM DUAL;
Resultado:
7
Aqui estão mais alguns exemplos:
SET NULL 'null';
SELECT
COALESCE(null, null, 1, 2, 3) AS "r1",
COALESCE(1, null, 2, 3) AS "r2",
COALESCE(null, 3, 2, 1) AS "r3",
COALESCE(1, 2, 3, null) AS "r4",
COALESCE(null, null) AS "r5"
FROM DUAL;
Resultado:
r1 r2 r3 r4 r5 _____ _____ _____ _____ _______ 1 1 3 1 null
Podemos ver que
COALESCE()
retorna null
quando todos os argumentos são nulos. Em relação à primeira linha
SET NULL 'null';
, adicionei isso para que minha sessão SQLcl retorne null
sempre que o resultado for nulo. Por padrão, SQLcl e SQL*Plus retornam um espaço em branco sempre que
null
ocorre como resultado de um SQL SELECT
demonstração. No entanto, você pode usar
SET NULL
para especificar uma string diferente a ser retornada. Aqui eu especifiquei que a string null
deve ser devolvido. Exemplo de banco de dados
Suponha que executemos a seguinte consulta:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Resultado:
LOCATION_ID STATE_PROVINCE ______________ ___________________ 1000 null 1100 null 1200 Tokyo Prefecture 1300 null 1400 Texas 1500 California
Podemos ver que várias das linhas são
null
no STATE_PROVINCE
coluna. Aqui está a consulta novamente, exceto que desta vez usamos
COALESCE()
contra o STATE_PROVINCE
coluna:SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Resultado:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A') ______________ _________________________________ 1000 N/A 1100 N/A 1200 Tokyo Prefecture 1300 N/A 1400 Texas 1500 California
Então usamos
COALESCE()
para retornar N/A
sempre que um valor nulo ocorreu. COALESCE()
vs CASE
Os seguintes:
COALESCE(expr1, expr2)
É equivalente a isso:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Contagem de argumentos inválida
Chamar a função sem passar nenhum argumento resulta em um erro:
SELECT COALESCE()
FROM DUAL;
Resultado:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"