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

Home -> Community -> Mailing Lists -> Oracle-L -> Re: Re[6]: to_number question

Re: Re[6]: to_number question

From: Wolfgang Breitling <breitliw_at_centrexcc.com>
Date: Thu, 15 Jul 2004 08:07:49 -0700
Message-ID: <1089904069.40f69dc5ae1fd@webmail.hosting.telus.net>


I had a response crafted and just when I tried to send it my web mail client that I'm forced to use during the day lost connection - and my response in the process. I'll try again
Quoting Jonathan Gennick <jonathan_at_gennick.com>:

>
> Then I would argue that it is not I who am bringing
> something into play that violates the rules, but that SQL
> itself is doing so. I fail to see how subqueries in the FROM
> clause can fail to violate the commutativity that you speak
> of.
>

The optimizer is not violating the rules of commutativity, it uses them. You are violating them by using to expressions where the second expression relies on the successful evaluation of the first. If I boil down the query to it basic elements, then I think Stephen's query is asking for all rows in the table where cold x contains only numeric digits and, when interpreted as a number satisfy a numeric expression e.g. is greater than a constant. In an arbitrary pseudo code language:

   is_greater(is_number(col),const) = true

but by the rules of commutativity, Oracle is allowed to execute

   is_number(is_greater(col),const) = true

If you write the original query as

  select x from t
  where decode(translate(col,'0123456789a','0123456789),null,'A','N') = N   and to_number(col) > const

you immediately recognize that you may be in trouble because you know that you must not rely on the predicates being evaluated in the order they appear in the where clause. So now put the first predicate into a inline view thinking that this way you impose a order of processing. Well, you don't. The optimizer is allowed to transform your query "back" into its simpler form.

-- 
Regards

Wolfgang Breitling
Oracle 7,8,8i,9i OCP DBA
Centrex Consulting Corporation
www.centrexcc.com

----------------------------------------------------------------
Please see the official ORACLE-L FAQ: http://www.orafaq.com
----------------------------------------------------------------
To unsubscribe send email to:  oracle-l-request_at_freelists.org
put 'unsubscribe' in the subject line.
--
Archives are at http://www.freelists.org/archives/oracle-l/
FAQ is at http://www.freelists.org/help/fom-serve/cache/1.html
-----------------------------------------------------------------
Received on Thu Jul 15 2004 - 10:04:48 CDT

Original text of this message

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