tech on the net

Oracle/PLSQL: NVL Function

Learn how to use the Oracle/PLSQL NVL function with syntax and examples.

Description

The Oracle/PLSQL NVL function lets you substitute a value when a null value is encountered.

Syntax

The syntax for the Oracle/PLSQL NVL function is:

NVL( string1, replace_with )

Parameters or Arguments

string1 is the string to test for a null value.

replace_with is the value returned if string1 is null.

Applies To

The NVL function can be used in the following versions of Oracle/PLSQL:

  • Oracle 12c, Oracle 11g, Oracle 10g, Oracle 9i, Oracle 8i

Example

Let's look at some Oracle NVL function examples and explore how you would use the NVL function in Oracle/PLSQL.

For example:

SELECT NVL(supplier_city, 'n/a')
FROM suppliers;

The SQL statement above would return 'n/a' if the supplier_city field contained a null value. Otherwise, it would return the supplier_city value.

Another example using the NVL function in Oracle/PLSQL is:

SELECT supplier_id,
NVL(supplier_desc, supplier_name)
FROM suppliers;

This SQL statement would return the supplier_name field if the supplier_desc contained a null value. Otherwise, it would return the supplier_desc.

A final example using the NVL function in Oracle/PLSQL is:

SELECT NVL(commission, 0)
FROM sales;

This SQL statement would return 0 if the commission field contained a null value. Otherwise, it would return the commission field.

Frequently Asked Questions

Question: I tried to use the NVL function through VB to access Oracle DB.

To be precise,

SELECT NVL(Distinct (emp_name),'AAA'),................ 
FROM.................

I got an oracle error when I use distinct clause with NVL, but when I remove distinct it works fine.

Answer: It is possible to the use the DISTINCT clause with the NVL function. However, the DISTINCT must come before the use of the NVL function. For example:

SELECT distinct NVL(emp_name, 'AAA')
FROM employees;

Hope this helps!


Question: Is it possible to use the NVL function with more than one column with the same function call? To be clear, if i need to apply this NVL function to more than one column like this:

NVL(column1;column2 ...... , here is the default value for all )

Answer: You will need to make separate NVL function calls for each column. For example:

SELECT NVL(table_name, 'not found'), NVL(owner, 'not found')
FROM all_tables;