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"