Oracle
 sql >> Base de Dados >  >> RDS >> Oracle

Função COALESCE() no Oracle


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"