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"