RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-09 Thread Cherie_Machler


Ron,

That's an idea.   Easy to implement and test.   I'll give it a try tonight
to see if it helps.

It is a small table.

Cherie


   

Ron Rogers   

RROGERS@galot   To: Multiple recipients of list ORACLE-L 
[EMAIL PROTECTED]   
tery.orgcc:   

Sent by: Subject: RE: SQL Tuning - How to avoid 
TOCHAR function against a date 
[EMAIL PROTECTED] 

om 

   

   

04/08/02 03:23 

PM 

Please respond 

to ORACLE-L

   

   





Tom,
  I realize that there would not be an index but I was trying to
eliminate some overhead by using the TRUNC function as compaired to the
to_char for the fields.
 Cherie,
  If the table is not to large how about pinning it  to save on disk
reads?
Ron
ROR mª¿ªm

 [EMAIL PROTECTED] 04/08/02 03:35PM 
Ron,

the TRUNC function will also prevent the use of an index on the
oracle_date
column.

Tom Mercadante
Oracle Certified Professional


-Original Message-
Sent: Monday, April 08, 2002 2:54 PM
To: Multiple recipients of list ORACLE-L


Cherie,
 How about using the TRUNC function on the date field. That will use
only thre ,MM,DD of the ORACLE_DATE column. Then you will be
comparing like columns without going through the to_char conversion.
WHERE TRUNC(ORACLE_DATE) = TRUNC(:b1)
Ron
ROR mª¿ªm

 [EMAIL PROTECTED] 04/08/02 01:56PM 

I've got the following SQL statement that is running very long on a
nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select
statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author:
  INET: [EMAIL PROTECTED]

Fat City Network Services-- (858) 538-5051  FAX: (858) 538-5051
San Diego, California-- Public Internet access / Mailing Lists

RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-09 Thread sundeep maini

I am jumping in the middle of this thread so execuse
me if I am repeating the past suggestions I haven't
read yet.  In a DW you'd have a date dim of dates only
(no time component to date) and a time_dim (down to
seconds). Your fact table should have a date_key and a
time_key if both date and time components are
significant. In that case your query

SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')

would be transformed to:

SELECT DATE_KEY
FROM DATE_DIM
WHERE ORACLE_DATE = TRUNC(:b1); 

You should perhaps update the oracle_date column in
date_dim to TRUNC(oracle_date,'DD') and then rebuild
the index on oracle_date column and run the above
mentioned query. 

- Sundeep

--- [EMAIL PROTECTED] wrote:
 
 Ron,
 
 That's an idea.   Easy to implement and test.   I'll
 give it a try tonight
 to see if it helps.
 
 It is a small table.
 
 Cherie
 
 
 
 
  
 Ron Rogers
 
  
 RROGERS@galot   To:
 Multiple recipients of list ORACLE-L
 [EMAIL PROTECTED]   
 tery.orgcc:
 
  
 Sent by: Subject:   
  RE: SQL Tuning - How to avoid TOCHAR function
 against a date 
 [EMAIL PROTECTED]  
 
  
 om  
 
  
 
 
  
 
 
  
 04/08/02 03:23  
 
  
 PM  
 
  
 Please respond  
 
  
 to ORACLE-L 
 
  
 
 
  
 
 
  
 
 
 
 
 Tom,
   I realize that there would not be an index but I
 was trying to
 eliminate some overhead by using the TRUNC function
 as compaired to the
 to_char for the fields.
  Cherie,
   If the table is not to large how about pinning it 
 to save on disk
 reads?
 Ron
 ROR mª¿ªm
 
  [EMAIL PROTECTED] 04/08/02 03:35PM 
 Ron,
 
 the TRUNC function will also prevent the use of an
 index on the
 oracle_date
 column.
 
 Tom Mercadante
 Oracle Certified Professional
 
 
 -Original Message-
 Sent: Monday, April 08, 2002 2:54 PM
 To: Multiple recipients of list ORACLE-L
 
 
 Cherie,
  How about using the TRUNC function on the date
 field. That will use
 only thre ,MM,DD of the ORACLE_DATE column. Then
 you will be
 comparing like columns without going through the
 to_char conversion.
 WHERE TRUNC(ORACLE_DATE) = TRUNC(:b1)
 Ron
 ROR mª¿ªm
 
  [EMAIL PROTECTED] 04/08/02 01:56PM 
 
 I've got the following SQL statement that is running
 very long on a
 nightly
 data load.   The problem is the TO_CHAR function
 which is preventing
 me from using the index on this small (20,000-row
 table).
 
 This is an 8.0.4 database so it is not possible for
 me to use
 make this a function-based index.
 
 The problem is that the date field has minutes, etc.
 included and
 those need to be eliminated before the comparison
 can be made.
 That's why I can't just eliminate the TO_CHAR from
 both sides
 of the equation.
 
 Isn't there a way that I can pull this function out
 of the select
 statement
 and do it in a preceeding statement?   Then I could
 just pass in both
 variables to this statement without the TO_CHAR and
 use my index.
 
 Is this realistic?  How, exactly could it be done?
 
 
 SELECT DATE_KEY
 FROM DATE_DIM
 WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
 TO_CHAR(:b1,'DD-MON-')
 
 
 SQL desc date_dim;
  NameNull?Type
  ---  
  DATE_KEYNOT NULL NUMBER(5)
  ORACLE_DATE NOT NULL DATE
  DATACOM_DATE NUMBER(6)
  DATACOM_REVERSE_DATE NUMBER(6)
  DAY_OF_WEEK NOT NULL
 VARCHAR2(30)
  DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
  DAY_NUMBER_OVERALL  NOT NULL NUMBER(9

RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread John Hallas

I have not got a system to test this out on at the moment but can you do a
substr on the to_char  so that the format matches the date_key
Something like substr((TO_CHAR(:b1,'DD-MON-'),11)

John


-Original Message-
[EMAIL PROTECTED]
Sent: 08 April 2002 18:57
To: Multiple recipients of list ORACLE-L


I've got the following SQL statement that is running very long on a nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author:
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).

-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: John Hallas
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).



RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Nicoll, Iain (Calanais)

Cherie,

Couldn't you do

SELECT DATE_KEY
FROM DATE_DIM
WHERE ORACLE_DATE = trunc(:b1)
and   oracle_date  trunc(:b1) + 1

which should at least give a range scan.

Iain Nicoll

-Original Message-
Sent: Monday, April 08, 2002 6:57 PM
To: Multiple recipients of list ORACLE-L



I've got the following SQL statement that is running very long on a nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: 
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Nicoll, Iain (Calanais)
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).



RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Pardee, Roy E

Could you maybe calculate a range of date values that encompasses the period
you want and use BETWEEN on the raw date column?  I'm thinking something
along the lines of:

   SELECT DATE_KEY
   FROM DATE_DIM
   WHERE ORACLE_DATE BETWEEN TRUNC(:b1) AND TRUNC(:b1) + .9 ;

but like, more elegant. 8^)

HTH,

-Roy

Roy Pardee
Programmer/Analyst
SWFPAC Lockheed Martin IT
Extension 8487

-Original Message-
Sent: Monday, April 08, 2002 10:57 AM
To: Multiple recipients of list ORACLE-L



I've got the following SQL statement that is running very long on a nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: 
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Pardee, Roy E
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).



RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Cherie_Machler


John,

I will test it out.   Thanks for your helpful recommendation.

Cherie


   
   
John Hallas  
   
john.hallas@hcresour   To: Multiple recipients of list 
ORACLE-L [EMAIL PROTECTED]   
ces.co.uk  cc:
   
Sent by:Subject: RE: SQL Tuning - How to 
avoid TOCHAR function against a date 
[EMAIL PROTECTED]   
   
   
   
   
   
04/08/02 01:20 PM  
   
Please respond to  
   
ORACLE-L   
   
   
   
   
   




I have not got a system to test this out on at the moment but can you do a
substr on the to_char  so that the format matches the date_key
Something like substr((TO_CHAR(:b1,'DD-MON-'),11)

John


-Original Message-
[EMAIL PROTECTED]
Sent: 08 April 2002 18:57
To: Multiple recipients of list ORACLE-L


I've got the following SQL statement that is running very long on a nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author:
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).

--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: John Hallas
  INET: [EMAIL PROTECTED]

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

Re: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Rachel Carmichael

I don't think you can do it.. I mean, you could change it to trunc the
oracle_date field (that eliminates the minutes) and then do a to_date
of :b1 but you will still be operating on the oracle_date field.

Okay, I HATE to suggest this, but since the table is small:

add another field to the table oracle_date_2 as a date field. Update
the table set oracle_date_2=trunc(oracle_date)

add a trigger to fill in oracle_date_2 when you insert a row or update
the oracle_date column


create an index on oracle_date_2 and change the query to use that
column


--- [EMAIL PROTECTED] wrote:
 
 I've got the following SQL statement that is running very long on a
 nightly
 data load.   The problem is the TO_CHAR function which is preventing
 me from using the index on this small (20,000-row table).
 
 This is an 8.0.4 database so it is not possible for me to use
 make this a function-based index.
 
 The problem is that the date field has minutes, etc. included and
 those need to be eliminated before the comparison can be made.
 That's why I can't just eliminate the TO_CHAR from both sides
 of the equation.
 
 Isn't there a way that I can pull this function out of the select
 statement
 and do it in a preceeding statement?   Then I could just pass in both
 variables to this statement without the TO_CHAR and use my index.
 
 Is this realistic?  How, exactly could it be done?
 
 
 SELECT DATE_KEY
 FROM DATE_DIM
 WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
 TO_CHAR(:b1,'DD-MON-')
 
 
 SQL desc date_dim;
  NameNull?Type
  ---  
  DATE_KEYNOT NULL NUMBER(5)
  ORACLE_DATE NOT NULL DATE
  DATACOM_DATE NUMBER(6)
  DATACOM_REVERSE_DATE NUMBER(6)
  DAY_OF_WEEK NOT NULL VARCHAR2(30)
  DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
  DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
  WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
  WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
  MONTH   NOT NULL VARCHAR2(30)
  MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
  YEARNOT NULL NUMBER(5)
  WEEKDAY_IND NOT NULL CHAR(1)
  LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
  DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
  DATA_MART_MOD_DATETIME  NOT NULL DATE
 
 
 
 SQL select oracle_date from date_dim where rownum=1;
 
 ORACLE_DA
 -
 01-JAN-70
 
 
 Thanks in advance for any help.
 
 Cherie Machler
 Oracle DBA
 Gelco Information Network
 
 
 
 
 
 
 
 -- 
 Please see the official ORACLE-L FAQ: http://www.orafaq.com
 -- 
 Author: 
   INET: [EMAIL PROTECTED]
 
 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: [EMAIL PROTECTED] (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).


__
Do You Yahoo!?
Yahoo! Tax Center - online filing with TurboTax
http://taxes.yahoo.com/
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Rachel Carmichael
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).



RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Cherie_Machler


Iain,

I will do some tests.   Theoretically, yes, a range scan should be better
than a full table scan.

Thanks for your helpful recommendation.

Cherie


   
  
Nicoll, Iain  
  
(Calanais)To: '[EMAIL PROTECTED]' 
[EMAIL PROTECTED]   
iain.nicoll@cal   cc: '[EMAIL PROTECTED]' 
[EMAIL PROTECTED]   
anais.com Subject: RE: SQL Tuning - How to avoid 
TOCHAR function against a date 
   
  
04/08/02 12:37 
  
PM 
  
   
  
   
  




Cherie,

Couldn't you do

SELECT DATE_KEY
FROM DATE_DIM
WHERE ORACLE_DATE = trunc(:b1)
and   oracle_date  trunc(:b1) + 1

which should at least give a range scan.

Iain Nicoll

-Original Message-
Sent: Monday, April 08, 2002 6:57 PM
To: Multiple recipients of list ORACLE-L



I've got the following SQL statement that is running very long on a nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author:
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).




-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: 
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).



RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Norrell, Brian

Something like:

WHERE ORACLE_DATE between trunc(:b1) and trunc(:b1) + 1 - 1/(24*60*60)

-Original Message-
Sent: Monday, April 08, 2002 12:57 PM
To: Multiple recipients of list ORACLE-L



I've got the following SQL statement that is running very long on a
nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select
statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: 
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).

-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Norrell, Brian
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).



Re: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Ron Rogers

Cherie,
 How about using the TRUNC function on the date field. That will use
only thre ,MM,DD of the ORACLE_DATE column. Then you will be
comparing like columns without going through the to_char conversion.
WHERE TRUNC(ORACLE_DATE) = TRUNC(:b1)
Ron
ROR mª¿ªm

 [EMAIL PROTECTED] 04/08/02 01:56PM 

I've got the following SQL statement that is running very long on a
nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select
statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com 
-- 
Author: 
  INET: [EMAIL PROTECTED] 

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: [EMAIL PROTECTED] (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).
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: Ron Rogers
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).



RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Mercadante, Thomas F

Ron,

the TRUNC function will also prevent the use of an index on the oracle_date
column.

Tom Mercadante
Oracle Certified Professional


-Original Message-
Sent: Monday, April 08, 2002 2:54 PM
To: Multiple recipients of list ORACLE-L


Cherie,
 How about using the TRUNC function on the date field. That will use
only thre ,MM,DD of the ORACLE_DATE column. Then you will be
comparing like columns without going through the to_char conversion.
WHERE TRUNC(ORACLE_DATE) = TRUNC(:b1)
Ron
ROR mª¿ªm

 [EMAIL PROTECTED] 04/08/02 01:56PM 

I've got the following SQL statement that is running very long on a
nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select
statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com 
-- 
Author: 
  INET: [EMAIL PROTECTED] 

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: [EMAIL PROTECTED] (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).
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Ron Rogers
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: Mercadante, Thomas F
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).



RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Mercadante, Thomas F

let's face it Rachel, the date column is probably incorrect as the table was
designed.  knowing that it is important in queries, and that the minutes
cause problems during query, your suggestion should have been incorporated
in the original design (or truncing the oracle_date field via a trigger).
both the blessing and curse of the DATE column.  great for performing date
math, but a pain when it comes to queries.

Tom Mercadante
Oracle Certified Professional


-Original Message-
Sent: Monday, April 08, 2002 2:54 PM
To: Multiple recipients of list ORACLE-L


I don't think you can do it.. I mean, you could change it to trunc the
oracle_date field (that eliminates the minutes) and then do a to_date
of :b1 but you will still be operating on the oracle_date field.

Okay, I HATE to suggest this, but since the table is small:

add another field to the table oracle_date_2 as a date field. Update
the table set oracle_date_2=trunc(oracle_date)

add a trigger to fill in oracle_date_2 when you insert a row or update
the oracle_date column


create an index on oracle_date_2 and change the query to use that
column


--- [EMAIL PROTECTED] wrote:
 
 I've got the following SQL statement that is running very long on a
 nightly
 data load.   The problem is the TO_CHAR function which is preventing
 me from using the index on this small (20,000-row table).
 
 This is an 8.0.4 database so it is not possible for me to use
 make this a function-based index.
 
 The problem is that the date field has minutes, etc. included and
 those need to be eliminated before the comparison can be made.
 That's why I can't just eliminate the TO_CHAR from both sides
 of the equation.
 
 Isn't there a way that I can pull this function out of the select
 statement
 and do it in a preceeding statement?   Then I could just pass in both
 variables to this statement without the TO_CHAR and use my index.
 
 Is this realistic?  How, exactly could it be done?
 
 
 SELECT DATE_KEY
 FROM DATE_DIM
 WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
 TO_CHAR(:b1,'DD-MON-')
 
 
 SQL desc date_dim;
  NameNull?Type
  ---  
  DATE_KEYNOT NULL NUMBER(5)
  ORACLE_DATE NOT NULL DATE
  DATACOM_DATE NUMBER(6)
  DATACOM_REVERSE_DATE NUMBER(6)
  DAY_OF_WEEK NOT NULL VARCHAR2(30)
  DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
  DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
  WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
  WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
  MONTH   NOT NULL VARCHAR2(30)
  MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
  YEARNOT NULL NUMBER(5)
  WEEKDAY_IND NOT NULL CHAR(1)
  LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
  DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
  DATA_MART_MOD_DATETIME  NOT NULL DATE
 
 
 
 SQL select oracle_date from date_dim where rownum=1;
 
 ORACLE_DA
 -
 01-JAN-70
 
 
 Thanks in advance for any help.
 
 Cherie Machler
 Oracle DBA
 Gelco Information Network
 
 
 
 
 
 
 
 -- 
 Please see the official ORACLE-L FAQ: http://www.orafaq.com
 -- 
 Author: 
   INET: [EMAIL PROTECTED]
 
 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: [EMAIL PROTECTED] (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).


__
Do You Yahoo!?
Yahoo! Tax Center - online filing with TurboTax
http://taxes.yahoo.com/
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Rachel Carmichael
  INET: [EMAIL PROTECTED]

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: [EMAIL PROTECTED] (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).
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com
-- 
Author: Mercadante, Thomas F
  INET: [EMAIL PROTECTED]

Fat City Network Services-- (858) 538-5051  FAX: (858) 538-5051
San Diego, California-- Public Internet access / Mailing Lists

RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Rachel Carmichael

I suppose if you wanted to collect statistics about hourly usage, then
the minutes info would be necessary 

but then, most people don't think about how they really want to use the
date when they add a date field


--- Mercadante, Thomas F [EMAIL PROTECTED] wrote:
 let's face it Rachel, the date column is probably incorrect as the
 table was
 designed.  knowing that it is important in queries, and that the
 minutes
 cause problems during query, your suggestion should have been
 incorporated
 in the original design (or truncing the oracle_date field via a
 trigger).
 both the blessing and curse of the DATE column.  great for performing
 date
 math, but a pain when it comes to queries.
 
 Tom Mercadante
 Oracle Certified Professional
 
 
 -Original Message-
 Sent: Monday, April 08, 2002 2:54 PM
 To: Multiple recipients of list ORACLE-L
 
 
 I don't think you can do it.. I mean, you could change it to trunc
 the
 oracle_date field (that eliminates the minutes) and then do a to_date
 of :b1 but you will still be operating on the oracle_date field.
 
 Okay, I HATE to suggest this, but since the table is small:
 
 add another field to the table oracle_date_2 as a date field. Update
 the table set oracle_date_2=trunc(oracle_date)
 
 add a trigger to fill in oracle_date_2 when you insert a row or
 update
 the oracle_date column
 
 
 create an index on oracle_date_2 and change the query to use that
 column
 
 
 --- [EMAIL PROTECTED] wrote:
  
  I've got the following SQL statement that is running very long on a
  nightly
  data load.   The problem is the TO_CHAR function which is
 preventing
  me from using the index on this small (20,000-row table).
  
  This is an 8.0.4 database so it is not possible for me to use
  make this a function-based index.
  
  The problem is that the date field has minutes, etc. included and
  those need to be eliminated before the comparison can be made.
  That's why I can't just eliminate the TO_CHAR from both sides
  of the equation.
  
  Isn't there a way that I can pull this function out of the select
  statement
  and do it in a preceeding statement?   Then I could just pass in
 both
  variables to this statement without the TO_CHAR and use my index.
  
  Is this realistic?  How, exactly could it be done?
  
  
  SELECT DATE_KEY
  FROM DATE_DIM
  WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
  TO_CHAR(:b1,'DD-MON-')
  
  
  SQL desc date_dim;
   NameNull?Type
   ---  
   DATE_KEYNOT NULL NUMBER(5)
   ORACLE_DATE NOT NULL DATE
   DATACOM_DATE NUMBER(6)
   DATACOM_REVERSE_DATE NUMBER(6)
   DAY_OF_WEEK NOT NULL VARCHAR2(30)
   DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
   DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
   WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
   WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
   MONTH   NOT NULL VARCHAR2(30)
   MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
   YEARNOT NULL NUMBER(5)
   WEEKDAY_IND NOT NULL CHAR(1)
   LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
   DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
   DATA_MART_MOD_DATETIME  NOT NULL DATE
  
  
  
  SQL select oracle_date from date_dim where rownum=1;
  
  ORACLE_DA
  -
  01-JAN-70
  
  
  Thanks in advance for any help.
  
  Cherie Machler
  Oracle DBA
  Gelco Information Network
  
  
  
  
  
  
  
  -- 
  Please see the official ORACLE-L FAQ: http://www.orafaq.com
  -- 
  Author: 
INET: [EMAIL PROTECTED]
  
  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: [EMAIL PROTECTED] (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).
 
 
 __
 Do You Yahoo!?
 Yahoo! Tax Center - online filing with TurboTax
 http://taxes.yahoo.com/
 -- 
 Please see the official ORACLE-L FAQ: http://www.orafaq.com
 -- 
 Author: Rachel Carmichael
   INET: [EMAIL PROTECTED]
 
 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: [EMAIL PROTECTED] (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 

RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Ron Rogers

Tom,
  I realize that there would not be an index but I was trying to
eliminate some overhead by using the TRUNC function as compaired to the
to_char for the fields.
 Cherie, 
  If the table is not to large how about pinning it  to save on disk
reads?
Ron
ROR mª¿ªm

 [EMAIL PROTECTED] 04/08/02 03:35PM 
Ron,

the TRUNC function will also prevent the use of an index on the
oracle_date
column.

Tom Mercadante
Oracle Certified Professional


-Original Message-
Sent: Monday, April 08, 2002 2:54 PM
To: Multiple recipients of list ORACLE-L


Cherie,
 How about using the TRUNC function on the date field. That will use
only thre ,MM,DD of the ORACLE_DATE column. Then you will be
comparing like columns without going through the to_char conversion.
WHERE TRUNC(ORACLE_DATE) = TRUNC(:b1)
Ron
ROR mª¿ªm

 [EMAIL PROTECTED] 04/08/02 01:56PM 

I've got the following SQL statement that is running very long on a
nightly
data load.   The problem is the TO_CHAR function which is preventing
me from using the index on this small (20,000-row table).

This is an 8.0.4 database so it is not possible for me to use
make this a function-based index.

The problem is that the date field has minutes, etc. included and
those need to be eliminated before the comparison can be made.
That's why I can't just eliminate the TO_CHAR from both sides
of the equation.

Isn't there a way that I can pull this function out of the select
statement
and do it in a preceeding statement?   Then I could just pass in both
variables to this statement without the TO_CHAR and use my index.

Is this realistic?  How, exactly could it be done?


SELECT DATE_KEY
FROM DATE_DIM
WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
TO_CHAR(:b1,'DD-MON-')


SQL desc date_dim;
 NameNull?Type
 ---  
 DATE_KEYNOT NULL NUMBER(5)
 ORACLE_DATE NOT NULL DATE
 DATACOM_DATE NUMBER(6)
 DATACOM_REVERSE_DATE NUMBER(6)
 DAY_OF_WEEK NOT NULL VARCHAR2(30)
 DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
 DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
 WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
 WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
 MONTH   NOT NULL VARCHAR2(30)
 MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
 YEARNOT NULL NUMBER(5)
 WEEKDAY_IND NOT NULL CHAR(1)
 LAST_DAY_IN_MONTH_IND   NOT NULL CHAR(1)
 DATA_WAREHOUSE_MOD_DATETIME NOT NULL DATE
 DATA_MART_MOD_DATETIME  NOT NULL DATE



SQL select oracle_date from date_dim where rownum=1;

ORACLE_DA
-
01-JAN-70


Thanks in advance for any help.

Cherie Machler
Oracle DBA
Gelco Information Network







-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com 
-- 
Author: 
  INET: [EMAIL PROTECTED] 

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: [EMAIL PROTECTED] (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).
-- 
Please see the official ORACLE-L FAQ: http://www.orafaq.com 
-- 
Author: Ron Rogers
  INET: [EMAIL PROTECTED] 

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-Ma
il message
to: [EMAIL PROTECTED] (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).
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com 
--
Author: Mercadante, Thomas F
  INET: [EMAIL PROTECTED] 

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: [EMAIL PROTECTED] (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).
--
Please see the official ORACLE-L FAQ: http://www.orafaq.com
--
Author: Ron Rogers
  INET: [EMAIL PROTECTED]

Fat City Network Services-- (858) 538-5051  FAX: (858) 538-5051
San Diego, 

RE: SQL Tuning - How to avoid TOCHAR function against a date

2002-04-08 Thread Cherie_Machler


Tom,

It is probably too late for this original design but  it is not too late
for a new
data warehouse that is in development.

Jared has made a recommendation for better date columns that may
help eliminate these problems.  I have forwarded that table design
on to the application owner.

Thanks for your reply.

Cherie


   
  
Mercadante,   
  
Thomas F  To: Multiple recipients of list 
ORACLE-L [EMAIL PROTECTED]   
[EMAIL PROTECTED]   cc: 
  
ate.ny.us Subject: RE: SQL Tuning - How to avoid 
TOCHAR function against a date 
Sent by:   
  
[EMAIL PROTECTED]   
  
   
  
   
  
04/08/02 02:35 
  
PM 
  
Please respond 
  
to ORACLE-L
  
   
  
   
  




let's face it Rachel, the date column is probably incorrect as the table
was
designed.  knowing that it is important in queries, and that the minutes
cause problems during query, your suggestion should have been incorporated
in the original design (or truncing the oracle_date field via a trigger).
both the blessing and curse of the DATE column.  great for performing date
math, but a pain when it comes to queries.

Tom Mercadante
Oracle Certified Professional


-Original Message-
Sent: Monday, April 08, 2002 2:54 PM
To: Multiple recipients of list ORACLE-L


I don't think you can do it.. I mean, you could change it to trunc the
oracle_date field (that eliminates the minutes) and then do a to_date
of :b1 but you will still be operating on the oracle_date field.

Okay, I HATE to suggest this, but since the table is small:

add another field to the table oracle_date_2 as a date field. Update
the table set oracle_date_2=trunc(oracle_date)

add a trigger to fill in oracle_date_2 when you insert a row or update
the oracle_date column


create an index on oracle_date_2 and change the query to use that
column


--- [EMAIL PROTECTED] wrote:

 I've got the following SQL statement that is running very long on a
 nightly
 data load.   The problem is the TO_CHAR function which is preventing
 me from using the index on this small (20,000-row table).

 This is an 8.0.4 database so it is not possible for me to use
 make this a function-based index.

 The problem is that the date field has minutes, etc. included and
 those need to be eliminated before the comparison can be made.
 That's why I can't just eliminate the TO_CHAR from both sides
 of the equation.

 Isn't there a way that I can pull this function out of the select
 statement
 and do it in a preceeding statement?   Then I could just pass in both
 variables to this statement without the TO_CHAR and use my index.

 Is this realistic?  How, exactly could it be done?


 SELECT DATE_KEY
 FROM DATE_DIM
 WHERE TO_CHAR(ORACLE_DATE,'DD-MON-') =
 TO_CHAR(:b1,'DD-MON-')


 SQL desc date_dim;
  NameNull?Type
  ---  
  DATE_KEYNOT NULL NUMBER(5)
  ORACLE_DATE NOT NULL DATE
  DATACOM_DATE NUMBER(6)
  DATACOM_REVERSE_DATE NUMBER(6)
  DAY_OF_WEEK NOT NULL VARCHAR2(30)
  DAY_NUMBER_IN_MONTH NOT NULL NUMBER(3)
  DAY_NUMBER_OVERALL  NOT NULL NUMBER(9)
  WEEK_NUMBER_IN_YEAR NOT NULL NUMBER(3)
  WEEK_NUMBER_OVERALL NOT NULL NUMBER(7)
  MONTH   NOT NULL VARCHAR2(30)
  MONTH_NUMBER_OVERALLNOT NULL NUMBER(7)
  YEARNOT NULL NUMBER(5)
  WEEKDAY_IND NOT NULL CHAR(1)
  LAST_DAY_IN_MONTH_IND