Solved

Oracle SQL statement - substitute null values

Posted on 2003-11-11
11
6,762 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
ID: 9723159
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
ID: 9723253
Something like:

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

Expert Comment

by:johnster_uk
ID: 9723881
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
ID: 9726152
seazodiac's solution is simple and will work.
0
 

Author Comment

by:fiftysix
ID: 9729470
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
ID: 9730050
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
ID: 9730176
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
ID: 9730539
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
ID: 9730723
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
ID: 9787713
Use the functions of the UTL_RAW package.


fifty_
0
 

Expert Comment

by:AYEB
ID: 12994423
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

Is Your Active Directory as Secure as You Think?

More than 75% of all records are compromised because of the loss or theft of a privileged credential. Experts have been exploring Active Directory infrastructure to identify key threats and establish best practices for keeping data safe. Attend this month’s webinar to learn more.

Question has a verified solution.

If you are experiencing a similar issue, please ask a related question

Suggested Solutions

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…
How to Unravel a Tricky Query Introduction If you browse through the Oracle zones or any of the other database-related zones you'll come across some complicated solutions and sometimes you'll just have to wonder how anyone came up with them.  …
This video shows, step by step, how to configure Oracle Heterogeneous Services via the Generic Gateway Agent in order to make a connection from an Oracle session and access a remote SQL Server database table.
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.

929 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

11 Experts available now in Live!

Get 1:1 Help Now