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

Como usar a função Coalesce no Oracle

O que é função de coalescência


Função de união é uma função útil no oracle e é muito útil quando queremos retornar os primeiros valores não nulos da lista. Este tutorial SQL fornece explicações, exemplos para a função Coalesce no Oracle e a diferença entre Coalesce e NVL

expr1 :Isso é retornado se não for nulo
expr2:Isso é retornado se não for nulo e a primeira expressão for nula
exprn:Isso é retornado se a expressão anterior for nula

Então, Coalesce no oracle retornará a primeira expressão se não for nulo, senão fará o coalesce o resto da expressão

Ponto importante

(1)O banco de dados Oracle usa avaliação de curto-circuito. O banco de dados avalia cada valor de expr e determina se é NULL, em vez de avaliar todos os valores de expr antes de determinar se algum deles é NULL.

(2) COALESCE no oráculo é equivalente à função Case

Então COALESCE (expr1, expr2) é equivalente a:
CASO QUANDO expr1 NÃO É NULL THEN expr1ELSE expr2 END

De forma similar,

COALESCE (expr1, expr2, …, exprn), para n>=3 é equivalente a:
CASO QUANDO expr1 NÃO É NULO ENTÃO expr1QUANDO expr2 NÃO É NULO ENTÃO expr2QUANDO expr3 NÃO É NULO ENTÃO expr3QUANDO exprn NÃO É NULO ENTÃO exprnEND

Ou isso pode ser escrito como
CASO QUANDO expr1 NÃO É NULO THEN expr1ELSE COALESCE (expr2, ..., exprn) END

(3) Normalmente, todos os expr da declaração coalesce devem ser do mesmo tipo de dados, senão ORA-00932 será retornado.
SQL> selecione coalesce('a',1,2) de dual;selecione coalesce('a',1,2) de dual*ERROR na linha 1:ORA-00932:tipos de dados inconsistentes:esperado CHAR obteve NUMBER 
Se todas as ocorrências de expressão forem tipos de dados numéricos ou qualquer tipo de dados não numérico que possa ser convertido implicitamente em um tipo de dados numérico, o Oracle Database determinará o argumento com a precedência numérica mais alta, converterá implicitamente os argumentos restantes para esse tipo de dados e retornará esse tipo de dados.

Como usar a função de coalescência

SQL> selecione coalesce(1,2,3) de dual;COALESCE(1,2,3)---------------1SQL> SELECT COALESCE(null, null, null , 'X', 'Y');COALESCE(...)---------------X

Exemplos de união


Suponha que tenhamos uma tabela do oráculo de funcionários que consiste em endereço1, endereço2 e endereço3 e podemos querer imprimir o primeiro endereço não nulo dos funcionários da tabela em ordem de prioridade endereço1> endereço2> endereço3
selecione emp_name, COALESCE(endereço1,endereço2,endereço3) do funcionário;

Diferença entre a função Coalesce e NVL

  1. Coalescência é a generalização da função NVL. A função NVL pode ser usada para duas expressões, enquanto coalesce pode ser usada para muitas
  2. No caso de duas expressões, elas são iguais, mas a implementação é diferente.Oracle avalia tanto a expressão no caso de NVL quanto apenas avalia a primeira expressão no caso de coalescer.Então, se a segunda expressão tiver erros, o NVL lançará erro enquanto coalescer não.
  3. Coalesce é padrão ANSI enquanto NVL é específico da Oracle

Artigos relacionados

Tutorial Oracle Sql
Função NULLIF no Oracle
Função NVL no Oracle
Função Oracle LISTAGG
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ functions023.htm#SQLRF00617