En Oracle Database, COALESCE()
la función devuelve la primera expresión no nula de la lista de expresiones.
Sintaxis
La sintaxis es así:
COALESCE(expr [, expr ]...)
Se deben pasar al menos dos expresiones.
Ejemplo
Aquí hay un ejemplo para demostrarlo:
SELECT COALESCE(null, 7)
FROM DUAL;
Resultado:
7
Aquí hay algunos ejemplos más:
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()
devuelve null
cuando todos los argumentos son nulos.
Con respecto a la primera línea SET NULL 'null';
, lo agregué para que mi sesión SQLcl devuelva null
siempre que el resultado sea nulo.
De forma predeterminada, SQLcl y SQL*Plus devuelven un espacio en blanco cada vez que null
ocurre como resultado de un SQL SELECT
declaración.
Sin embargo, puede usar SET NULL
para especificar una cadena diferente a devolver. Aquí especifiqué que la cadena null
debe ser devuelto.
Ejemplo de base de datos
Supongamos que ejecutamos la siguiente 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 varias de las filas son null
en el STATE_PROVINCE
columna.
Aquí está la consulta de nuevo, excepto que esta vez usamos COALESCE()
contra el STATE_PROVINCE
columna:
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
Así que usamos COALESCE()
para devolver N/A
siempre que se produzca un valor nulo.
COALESCE()
vs CASE
Lo siguiente:
COALESCE(expr1, expr2)
Es equivalente a esto:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Recuento de argumentos no válidos
Llamar a la función sin pasar ningún argumento da como resultado un error:
SELECT COALESCE()
FROM DUAL;
Resultado:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"