Oracle FAQ Your Portal to the Oracle Knowledge Grid
HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US
 

Home -> Community -> Mailing Lists -> Oracle-L -> AHA!!! Re: ORA-00904 on a valid view when using count(*)

AHA!!! Re: ORA-00904 on a valid view when using count(*)

From: Maria Aurora VT de la Vega <mtdelavega_at_pse.org.ph>
Date: Wed, 02 Jan 2002 03:48:12 -0800
Message-ID: <F001.003E4D63.20020102030518@fatcity.com>

hahaha! i found it!
i found the answer to my problem....
the part that causes the error was the order by clause using an alias... i tried to change the sql for the view using the whole exp (((sq.last_trade_price - sq.previous)/sq.previous) * 100) in the order by clause instead of the "perc_change" alias... and it worked!
almost a week of thinking about this problem... i was itching to touch my database...while everyone else were sooo into the new year celebrations...
now I can celebrate!
=)
this looks like a bug...if anyone of you is working for oracle...kindly take note of this...
Maria Aurora VT de la Vega wrote:
yup. tried to validate...no
luck, tried to rebuild...no luck,
tried
creating a new base table (CTAS)...and
create new views (same sql as orig views)...still no luck...problem can be recreated...
here's the objects involved....
SQL> desc stock_quote
 Name                                     
Null?    Type
 -----------------------------------------

-------- ----------------------------

 SECURITY_ID                                       
VARCHAR2(10)
 BID                                               
NUMBER(12,4)
 ASK                                               
NUMBER(12,4)
 PREVIOUS                                          
NUMBER(12,4)
 OPEN                                              
NUMBER(12,4)
 HIGH                                              
NUMBER(12,4)
 LOW                                               
NUMBER(12,4)
 CLOSE                                             
NUMBER(12,4)
 LAST_TRADE_PRICE                                  
NUMBER(12,4)
 TOTAL_VOLUME                                      
NUMBER(18,4)
 TOTAL_VALUE                                       
NUMBER(18,4)
 PROJECTED_OPEN                                    
NUMBER(16,4)
 SPECIAL_VOLUME                                    
NUMBER(18,4)
 SPECIAL_VALUE                                     
NUMBER(18,4)
 TOTAL_FOREIGN_BUYING                              
NUMBER(16,4)
 TOTAL_FOREIGN_SELLING                             
NUMBER(16,4)
 TOTAL_OUTSTANDING                                 
NUMBER(16,4)
 CURR_FOREIGN_SHARES_AVAIL                         
NUMBER(16,4)
 SECURITY_SYMBOL                                   
VARCHAR2(12)
SQL> desc company
 Name                                     
Null?    Type
 -----------------------------------------
-------- ---------------------

 COMPANY_ID                               
NOT NULL VARCHAR2(10)
 NAME                                              
VARCHAR2(60)
 TELEPHONE                                         
VARCHAR2(200)
 FAX                                               
VARCHAR2(40)
 URL                                               
VARCHAR2(50)
 EMAIL                                             
VARCHAR2(30)
 PROFILE_FNAME                                     
VARCHAR2(100)
 SUBSECTOR_ID                                      
VARCHAR2(8)
 LOGO                                              
VARCHAR2(100)
 INCORP_DATE                                       
DATE
 LISTING_DATE                                      
DATE
 ADDRESS                                           
VARCHAR2(250)
SQL> desc security
 Name                                     
Null?    Type
 -----------------------------------------
-------- ----------------------------

 SECURITY_ID                              
NOT NULL VARCHAR2(10)
 SECURITY_SYMBOL                                   
VARCHAR2(12)
 ISIN                                              
VARCHAR2(12)
 SUBSECTOR_ID                                      
VARCHAR2(8)
 ALIAS                                             
VARCHAR2(15)
 COMPANY_ID                                        
VARCHAR2(10)
 SECURITY_TYPE                                     
CHAR(1)
 CEILING                                           
NUMBER(12,4)
 FLOOR                                             
NUMBER(12,4)
 PRIOR_CLOSE                                       
NUMBER(12,4)
 LAST_TRADED_DATE                                  
DATE
 PAR_VALUE                                         
NUMBER(12,4)
 BOARD_LOT                                         
NUMBER(16,4)
 BIG_LOT                                           
NUMBER(16,4)
 DESIGNATED                                        
CHAR(1)
 SUSPENSION                                        
CHAR(1)
 DELIST                                            
CHAR(1)
 HALT                                              
CHAR(1)
 SPLIT                                             
CHAR(1)
 BENEFIT                                           
CHAR(1)
 EX_DIVIDEND                                       
CHAR(1)
 EX_RIGHTS                                         
CHAR(1)
 FOREIGN_ID_REQUIRED                               
CHAR(1)
 TOTAL_OUTSTANDING_SHARES                          
NUMBER(16,4)
 FOREIGN_OWNABLE_SHARES                            
NUMBER(16,4)
 CURRENT_FOREIGN_SHARES                            
NUMBER(16,4)
 MATURITY_DATE                                     
DATE
 SHORT_SELL                                        
CHAR(1)
 EX_CASH_DATE                                      
DATE
 EX_CASH                                           
CHAR(1)
 EX_DIVIDEND_INFO                                  
VARCHAR2(6)
 EX_CASH_INFO                                      
VARCHAR2(6)
 FOREIGN_UPDATE                                    
CHAR(1)
 OUTSTANDING_SHORT                                 
NUMBER(16,4)
 ISSUER_NAME                                       
VARCHAR2(7)
 CURRENCY                                          
CHAR(1)
 MIN_LOT                                           
NUMBER(16,4)
 COUPON_RATE                                       
NUMBER(10,4)
 NEXT_COUPON_DATE                                  
DATE
 LAST_UPDATED                                      
DATE
 STATUS                                            
CHAR(1)
 SECURITY_NAME                                     
VARCHAR2(25)
 YTD_VOLUME                                        
NUMBER(17,4)
 YTD_VALUE                                         
NUMBER(17,4)
 HIGH_52_WEEK                                      
NUMBER(12,4)
 LOW_52_WEEK                                       
NUMBER(12,4)
 SECURITY_RSI                                      
NUMBER(16,4)
 SECURITY_PER                                      
NUMBER(16,4)
 SECURITY_EPS                                      
NUMBER(16,4)
create or replace view
trade_quotes_vw as SELECT "SECURITY_ID","BID","ASK","PREVIOUS","OPEN","HIGH","LOW","CLOSE",
"LAST_TRADE_PRICE","TOTAL_VOLUME","TOTAL_VALUE","PROJECTED_OPEN","SPECIAL_VOLUME",
"SPECIAL_VALUE","TOTAL_FOREIGN_BUYING","TOTAL_FOREIGN_SELLING","TOTAL_OUTSTANDING",
"CURR_FOREIGN_SHARES_AVAIL","SECURITY_SYMBOL" FROM stock_quote WHERE last_trade_price > 0; create view gain_vw as
SELECT co.name, sec.alias, sec.security_name, sec.security_symbol, sq.open, sq.high,
sq.low, sq.close, sq.previous, sq.last_trade_price, sq.total_volume, sq.total_value,
(((sq.last_trade_price - sq.previous)/sq.previous) * 100) AS perc_change,
(sq.last_trade_price - sq.previous)
AS value_gain
FROM trade_quotes_vw sq, security
sec, company co
WHERE sq.security_symbol = sec.security_symbol AND sec.company_id = co.company_id
AND NVL(sq.previous,0) > 0
AND (NVL(sq.last_trade_price,0) -
NVL(sq.previous,0)) > 0
ORDER BY perc_change DESC;
looks like everythings ok here...but
it still won't work!
Stephane Faroult wrote:
Maria,
  The only cases I have seen so

far of one query working and the other
one failing miserably were linked
to a change in the execution plan (for
one query Oracle uses a safe path,
and stumbles along the way when it
uses a different one). The only stumble-block I can think of is indexes,
which are unlikely to be used in a
SELECT * (without any condition) but
might be scanned in the other cases.
I don't think that a query which
fails will show any execution plan
with SET AUTOTRACE ON, unfortunately.
If I were you I would try to check
the indexes on all the tables
involved, perhaps VALIDATE them or
rebuild them, or even (if tables are
not too big) drop and recreate them.
I have also noticed that when a
function-based index is used, a weird
column name appears in
DBA_IND_COLUMNS, which could explain
ORA-0904 if improperly managed
during parsing. Do you have any? If
this is the case, drop it and try
again, to see if it is the culprit.
This is about all I can think of.
--
Regards,
Stephane Faroult
Oriole Ltd
--
Please see the official ORACLE-L FAQ:
http://www.orafaq.com
--
Author: Stephane Faroult

  INET: sfaroult_at_oriole.com
Fat City Network Services    -- (858) 538-5051  FAX: (858) 538-5051 San Diego, California        -- Public Internet access / Mailing Lists -------------------------------------------------------------------- To REMOVE yourself from this mailing list, send an E-Mail message to: ListGuru_at_fatcity.com (note EXACT spelling of 'ListGuru') and in the message BODY, include a line containing: UNSUB ORACLE-L (or the name of mailing list you want to be removed from).  You may also send the HELP command for other information (like subscribing). -- Maria Aurora VT de la Vega (OCP) Database Specialist Philippine Stock Exchange, Inc.
 
-- Maria Aurora VT de la Vega (OCP) Database Specialist Philippine Stock Exchange, Inc.
 
Received on Wed Jan 02 2002 - 05:48:12 CST

Original text of this message

HOME | ASK QUESTION | ADD INFO | SEARCH | E-MAIL US