Coalesce Function in Oracle

Last updated on October 30th, 2018 at 04:28 am

Coalesce Function is a useful function in oracle and it is very useful when we want to return first non null values in the list

Coalesce Function  in Oracle

expr1 : This is returned if it is not null
expr2: This is returned if it is not null and first expression is null
exprn: This is returned if the preceding expression are null

So Coalesce function will return first expression if it is not null else it will do the coalesce the rest of the expression

Important point

1)Oracle Database uses short-circuit evaluation. The database evaluates each expr value and determines whether it is NULL, rather than evaluating all of the expr values before determining whether any of them is NULL.

2)COALESCE is equivalent to Case function

So COALESCE (expr1, expr2)
is equivalent to:

CASE WHEN expr1 IS NOT NULL THEN expr1

ELSE expr2 END

Similarly,

COALESCE (expr1, expr2, …, exprn), for n>=3
is equivalent to:

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

Or this can be written as

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

3) Usually all the expr of the coalesce statement should be of the same datatype else ORA-00932 will be returned.

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

If all occurrences of expression are numeric datatype or any non-numeric datatype that can be implicitly converted to a numeric datatype, then Oracle Database determines the argument with the highest numeric precedence, implicitly converts the remaining arguments to that datatype, and returns that datatype.

Usage

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

COALESCE(1,2,3)
—————
1

SQL> SELECT COALESCE(null, null, null, ‘X’, ‘Y’);

COALESCE(…)
—————

X

Suppose we have a employee table consisting address1, address2 and address3  and we can want to print the first not-null address of the employees from the table in order of priority address1 > address2 > address3

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

 

 

 

 

Leave a Reply