In Oracle Database, the COALESCE() function returns the first non-null expression the expression list.
Syntax
The syntax goes like this:
COALESCE(expr [, expr ]...)
At least two expressions must be passed.
Example
Here’s an example to demonstrate:
SELECT COALESCE(null, 7)
FROM DUAL;
Result:
7
Here are some more examples:
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;
Result:
r1 r2 r3 r4 r5
_____ _____ _____ _____ _______
1 1 3 1 null
We can see that COALESCE() returns null when all arguments are null.
Regarding the first line SET NULL 'null';, I added that so that my SQLcl session returns null whenever the result is null.
By default, SQLcl and SQL*Plus return a blank space whenever null occurs as a result of a SQL SELECT statement.
However, you can use SET NULL to specify a different string to be returned. Here I specified that the string null should be returned.
Database Example
Suppose we run the following query:
SET NULL 'null';
SELECT
LOCATION_ID,
STATE_PROVINCE
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Result:
LOCATION_ID STATE_PROVINCE
______________ ___________________
1000 null
1100 null
1200 Tokyo Prefecture
1300 null
1400 Texas
1500 California
We can see that several of the rows are null in the STATE_PROVINCE column.
Here’s the query again, except this time we use COALESCE() against the STATE_PROVINCE column:
SELECT
LOCATION_ID,
COALESCE(STATE_PROVINCE, 'N/A')
FROM LOCATIONS
ORDER BY LOCATION_ID ASC
FETCH FIRST 6 ROWS ONLY;
Result:
LOCATION_ID COALESCE(STATE_PROVINCE,'N/A')
______________ _________________________________
1000 N/A
1100 N/A
1200 Tokyo Prefecture
1300 N/A
1400 Texas
1500 California
So we used COALESCE() to return N/A whenever a null value occurred.
COALESCE() vs CASE
The following:
COALESCE(expr1, expr2)
Is equivalent to this:
CASE WHEN expr1 IS NOT NULL THEN expr1 ELSE expr2 END
Invalid Argument Count
Calling the function without passing any arguments results in an error:
SELECT COALESCE()
FROM DUAL;
Result:
SQL Error: ORA-00938: not enough arguments for function 00938. 00000 - "not enough arguments for function"