views:

122

answers:

2

Please tell me how to use a calculated column in where condition in oracle 9i?

I want to use something like

select decode (:pValue,1,
               select sysdate from dual,
               select activation_date from account where AcNo = 1234) as calDate
where caldate between startDate and endDate;
+4  A: 

You can use an in-line view:

select calcdate from
(
select startDate, endDate,
       decode (:pValue,1,
               select sysdate from dual,
               select activation_date from account where AcNo = 1234) as calcdate
)
where calcdate between startDate and endDate;
Tony Andrews
This will give ORA-00904: "caldate": invalid identifier
Sachin Chourasiya
@SachinChorasiya - If you had *looked* at Tony's sample you would have noticed that it contained a typo (which I have now corrected). It is a seriously bad idea to run code off the internet without properly reviewing first.
APC
Thanks for fixing that, Andrew.
Tony Andrews
not having a good day are we :)
Jeffrey Kemp
+2  A: 

You could select your date from dual and join the results:

select * 
from   <<your table with startDate and endDate columns>> -- Since you ommited the main "from" clause from your statement
,      (
         select decode( :pValue
                      , 1, sysdate
                      , ( select activation_date from account where AcNo = 1234 )
                      ) as calDate
         from   dual
       ) c
where  c.calDate between startDate and endDate
... -- any other conditions you may need
R. Genaro