Solved

Oracle SQL statement - substitute null values

Posted on 2003-11-11
11
6,757 Views
Last Modified: 2007-12-19
Hi,

I'm using Oracle 9.2.

I would like to write an sql select statement that collects the ID and DATA fileds of a table and if the DATA filed contains NULL it gets the content of the DATA2 filed.  

So I would like to create one select statement instead of these two:

select id, data from mytable where data is not null;
select id, data2 from mytable where data is null;

Is it possible with one select statement?

thanks,
fiftysix

0
Comment
Question by:fiftysix
11 Comments
 
LVL 23

Expert Comment

by:seazodiac
Comment Utility
do this:

select id, nvl(data, data2) from mytable;

or decode() function:

select id, decode(data, NULL, data2, data) from mytable;

0
 
LVL 8

Expert Comment

by:baonguyen1
Comment Utility
Something like:

select id, decode(data, NULL, data, data2) as selected_data
from mytable;
0
 

Expert Comment

by:johnster_uk
Comment Utility
Hi there is a function in 9i called NVL2. The syntax for this is NVL2(expr1, expr2, expr3). If expr1 is null then expr2 is returned. If expr1 is not null then expr3 is returned. You might use:

select id, nvl2(data, data2, data) from mytable;

0
 
LVL 3

Expert Comment

by:taisk
Comment Utility
seazodiac's solution is simple and will work.
0
 

Author Comment

by:fiftysix
Comment Utility
hi,

thanks for the answers, but I still have problems.

This is my table:
  id - number
  data - varchar2
  data2 - long raw

When I use the nvl function I get the following error:

select id, nvl(data, data2) from mytable;
ORA-00932: inconsistent datatypes: expected NUMBER got BINARY

when I use the decode function I get this:

select id, decode(data, NULL, data2, data) from mytable;
ORA-00997: illegal use of LONG datatype

Any idea?
0
PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

 
LVL 8

Expert Comment

by:gajender_99
Comment Utility
try this one
because you are using a string data type and a long one in decode you should only use  same type of data type


select id, decode(data, NULL, to_char(data2), data) from mytable
0
 

Author Comment

by:fiftysix
Comment Utility
to_char was my 1st idea also, but this is the result:

ORA-00932: inconsistent datatypes: expected CHAR got BINARY
0
 
LVL 8

Expert Comment

by:baonguyen1
Comment Utility
If I'm not wrong Long raw is used to store graphics, sound, documents, or arrays of binary data and it cannot be selected using SQL*Plus .  That why you got error ORA-00932 .

0
 
LVL 8

Expert Comment

by:baonguyen1
Comment Utility
I think solution is  create a table and convert the Long Raw data type to BLOB then select it as:

SQL>Create table mytable_2 (id number, data varchar2, data2 blob);
table created
SQL>insert into mytable_2  select id, data,  to_lob(data2) from mytable;

TO_LOB is used to covert Long Raw to BLOB (8.1x or higher)

Then

SQL> select id, decode(data, NULL, to_char(data2), data) from mytable


0
 

Accepted Solution

by:
fifty_ earned 30 total points
Comment Utility
Use the functions of the UTL_RAW package.


fifty_
0
 

Expert Comment

by:AYEB
Comment Utility
imagine you have an indexe on data and it's a big table with decode you are going to make a full scan , is'nt it ???
0

Featured Post

PRTG Network Monitor: Intuitive Network Monitoring

Network Monitoring is essential to ensure that computer systems and network devices are running. Use PRTG to monitor LANs, servers, websites, applications and devices, bandwidth, virtual environments, remote systems, IoT, and many more. PRTG is easy to set up & use.

Join & Write a Comment

Suggested Solutions

Why doesn't the Oracle optimizer use my index? Querying too much data Most Oracle developers know that an index is useful when you can use it to restrict your result set to a small number of the total rows in a table. So, the obvious side…
Have you ever had to make fundamental changes to a table in Oracle, but haven't been able to get any downtime?  I'm talking things like: * Dropping columns * Shrinking allocated space * Removing chained blocks and restoring the PCTFREE * Re-or…
This video explains at a high level with the mandatory Oracle Memory processes are as well as touching on some of the more common optional ones.
This video shows how to Export data from an Oracle database using the Datapump Export Utility.  The corresponding Datapump Import utility is also discussed and demonstrated.

762 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question

Need Help in Real-Time?

Connect with top rated Experts

7 Experts available now in Live!

Get 1:1 Help Now