Want to win a PS4? Go Premium and enter to win our High-Tech Treats giveaway. Enter to Win

x
?
Solved

Oracle SQL statement - substitute null values

Posted on 2003-11-11
11
Medium Priority
?
6,791 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
[X]
Welcome to Experts Exchange

Add your voice to the tech community where 5M+ people just like you are talking about what matters.

  • Help others & share knowledge
  • Earn cash & points
  • Learn & ask questions
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
Veeam Task Manager for Hyper-V

Task Manager for Hyper-V provides critical information that allows you to monitor Hyper-V performance by displaying real-time views of CPU and memory at the individual VM-level, so you can quickly identify which VMs are using host resources.

 
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
 
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 90 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

Industry Leaders: We Want Your Opinion!

We value your feedback.

Take our survey and automatically be enter to win anyone of the following:
Yeti Cooler, Amazon eGift Card, and Movie eGift Card!

Question has a verified solution.

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

How to Create User-Defined Aggregates in Oracle Before we begin creating these things, what are user-defined aggregates?  They are a feature introduced in Oracle 9i that allows a developer to create his or her own functions like "SUM", "AVG", and…
I remember the day when someone asked me to create a user for an application developement. The user should be able to create views and materialized views and, so, I used the following syntax: (CODE) This way, I guessed, I would ensure that use…
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 videos aims to give the viewer a basic demonstration of how a user can query current session information by using the SYS_CONTEXT function

604 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