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

Función COALESCE() en Oracle

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"