sql >> Base de Datos >  >> RDS >> Oracle

Cómo usar la función Coalesce en Oracle

¿Qué es la función de fusión

Función de fusión es una función útil en Oracle y es muy útil cuando queremos devolver los primeros valores no nulos en la lista. Este tutorial de SQL proporciona explicaciones, ejemplos de la función Coalesce en Oracle y la diferencia entre Coalesce y NVL

expr1 :Esto se devuelve si no es nulo
expr2:Esto se devuelve si no es nulo y la primera expresión es nula
exprn:Esto se devuelve si la expresión anterior es nula

Por lo tanto, Coalesce en Oracle devolverá la primera expresión si no es nula; de lo contrario, fusionará el resto de la expresión

Punto importante

(1) La base de datos de Oracle utiliza evaluación de cortocircuito. La base de datos evalúa cada valor de expresión y determina si es NULL, en lugar de evaluar todos los valores de expresión antes de determinar si alguno de ellos es NULL.

(2) COALESCE en Oracle es equivalente a la función Case

Entonces COALESCE (expr1, expr2) es equivalente a:

CASE WHEN expr1 IS NOT NULL THEN expr1

ELSE expr2 END

Del mismo modo,

COALESCE (expr1, expr2, …, exprn), para n>=3 es equivalente a:

CASE WHEN expr1 IS NOT NULL THEN expr1
WHEN expr2 IS NOT NULL THEN expr2

WHEN expr3 IS NOT NULL THEN expr3

WHEN exprn IS NOT NULL THEN exprn

END

O esto se puede escribir como

CASE WHEN expr1 IS NOT NULL THEN expr1
ELSE COALESCE (expr2, ..., exprn) END

(3) Por lo general, todas las expr de la instrucción coalesce deben ser del mismo tipo de datos; de lo contrario, se devolverá ORA-00932.

SQL> select coalesce('a',1,2) from dual;
select coalesce('a',1,2) from dual
*
ERROR at line 1:
ORA-00932: inconsistent datatypes: expected CHAR got NUMBER

Si todas las apariciones de expresión son tipos de datos numéricos o cualquier tipo de datos no numérico que se pueda convertir implícitamente a un tipo de datos numérico, Oracle Database determina el argumento con la precedencia numérica más alta, convierte implícitamente los argumentos restantes a ese tipo de datos y devuelve ese tipo de datos.

Cómo utilizar la función de fusión

SQL> select coalesce(1,2,3) from dual;
COALESCE(1,2,3)
---------------
1

SQL> SELECT COALESCE(null, null, null, 'X', 'Y');
COALESCE(...)
---------------
X

Ejemplos de fusión

Supongamos que tenemos una tabla de oráculo de empleados que consta de dirección1, dirección2 y dirección3 y podemos querer imprimir la primera dirección no nula de los empleados de la tabla en orden de prioridad dirección1> dirección2> dirección3

select emp_name, COALESCE(address1,address2,address3) from employee;

Diferencia entre la función Coalesce y NVL

  1. Coalesce es la generalización de la función NVL. La función NVL se puede usar para dos expresiones, mientras que coalesce se puede usar para Muchas
  2. En el caso de dos expresiones, son iguales pero la implementación es diferente. Oracle evalúa ambas expresiones en el caso de NVL, mientras que solo evalúa la primera expresión en caso de fusión. Entonces, si la segunda expresión tiene errores, NVL generará un error mientras que coalescer no lo hará.
  3. Coalesce es el estándar ANSI, mientras que NVL es específico de Oracle

Artículos relacionados

Tutorial de Oracle Sql
Función NULLIF en Oracle
Función NVL en Oracle
Función Oracle LISTAGG
https://docs.oracle.com/cd/B28359_01/server.111/b28286/ funciones023.htm#SQLRF00617