Unix Technical Forum

Fetch table names from query

This is a discussion on Fetch table names from query within the Oracle Miscellaneous forums, part of the Oracle Database category; --> Is there any simple way to extract the table names of a given SELECT query without actually running it? ...


Go Back   Unix Technical Forum > Database Server Software > Oracle Database > Oracle Miscellaneous

FAQ Members List Calendar Search Today's Posts Mark Forums Read
  #1 (permalink)  
Old 05-20-2008, 06:56 PM
=?ISO-8859-1?Q?=22=C1lvaro_G=2E_Vicario=22?=
 
Posts: n/a
Default Fetch table names from query

Is there any simple way to extract the table names of a given SELECT
query without actually running it?

I've implemented a very simple results cache in my PHP application but
I'd like to improve it. And one of the key points is finding out what
tables a query reads from so I can handle obsolete data. Writing a
reliable SQL parser in PHP looks like a hard task and obtaining a full
explain plan from the Oracle server looks like an overkill.

Any ideas?

Thank you in advance,


--
-- http://alvaro.es - Álvaro G. Vicario - Burgos, Spain
-- Mi sitio sobre programación web: http://bits.demogracia.com
-- Mi web de humor al baño María: http://www.demogracia.com
--
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #2 (permalink)  
Old 05-24-2008, 07:10 AM
DA Morgan
 
Posts: n/a
Default Re: Fetch table names from query

Álvaro G. Vicario wrote:
> Is there any simple way to extract the table names of a given SELECT
> query without actually running it?
>
> I've implemented a very simple results cache in my PHP application but
> I'd like to improve it. And one of the key points is finding out what
> tables a query reads from so I can handle obsolete data. Writing a
> reliable SQL parser in PHP looks like a hard task and obtaining a full
> explain plan from the Oracle server looks like an overkill.
>
> Any ideas?
>
> Thank you in advance,


This is horrifying. Obsolete data is defined by an SLA with the customer
not by whether it is accessed.

For example I have organizations here in the US that are, by law,
required to keep data online for 7 years. It hopefully will never be
accessed. But on audit, if it isn't there, they are in a boatload of
trouble.

This is a really bad idea, for many reasons, you should drop
immediately. Leave managing the database to the database professionals.
It is not something someone writing PHP should involve themselves in.
--
Daniel A. Morgan
Oracle Ace Director & Instructor
University of Washington
damorgan@x.washington.edu (replace x with u to respond)
Puget Sound Oracle Users Group
www.psoug.org
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #3 (permalink)  
Old 05-24-2008, 07:10 AM
Dan Blum
 
Posts: n/a
Default Re: Fetch table names from query

DA Morgan <damorgan@psoug.org> wrote:
> ?lvaro G. Vicario wrote:
> > Is there any simple way to extract the table names of a given SELECT
> > query without actually running it?
> >
> > I've implemented a very simple results cache in my PHP application but
> > I'd like to improve it. And one of the key points is finding out what
> > tables a query reads from so I can handle obsolete data. Writing a
> > reliable SQL parser in PHP looks like a hard task and obtaining a full
> > explain plan from the Oracle server looks like an overkill.
> >
> > Any ideas?
> >
> > Thank you in advance,


> This is horrifying. Obsolete data is defined by an SLA with the customer
> not by whether it is accessed.


> For example I have organizations here in the US that are, by law,
> required to keep data online for 7 years. It hopefully will never be
> accessed. But on audit, if it isn't there, they are in a boatload of
> trouble.


> This is a really bad idea, for many reasons, you should drop
> immediately. Leave managing the database to the database professionals.
> It is not something someone writing PHP should involve themselves in.


I think he means he wants to identify obsolete data in his results cache,
so he can refresh it from the database, not delete data from the database.

However, I agree that this is not a wonderful idea, as it is essentially
recreating Oracle functionality. If results caching is that critical,
I would suggest running 11g, which implements it.

--
__________________________________________________ _____________________
Dan Blum tool@panix.com
"I wouldn't have believed it myself if I hadn't just made it up."
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #4 (permalink)  
Old 05-24-2008, 07:10 AM
=?ISO-8859-1?Q?=22=C1lvaro_G=2E_Vicario=22?=
 
Posts: n/a
Default Re: Fetch table names from query

Dan Blum escribió:
>> This is horrifying. Obsolete data is defined by an SLA with the customer
>> not by whether it is accessed.


> I think he means he wants to identify obsolete data in his results cache,
> so he can refresh it from the database, not delete data from the database.


Er... Yes, that's it. I can't even understand what Morgan means. A
results cache must not be such a bad idea if many major DBMS implement
it in recent versions, including Oracle itself.


> However, I agree that this is not a wonderful idea, as it is essentially
> recreating Oracle functionality. If results caching is that critical,
> I would suggest running 11g, which implements it.


However, the database server runs 10g. If I tell the customer that in
order to run an auxiliary web reports application they need to buy a
licence for 11g, upgrade their server, check that all existing apps
(functions, stored procedures, ERP, several custom Oracle Forms
utilities, online orders web site, backup system...) do not break... I'd
say they won't be amused.

So I assume the only way to obtaining table names is explain plan :-? I
guess I'll stick to my PHP-side solution by now.


--
-- http://alvaro.es - Álvaro G. Vicario - Burgos, Spain
-- Mi sitio sobre programación web: http://bits.demogracia.com
-- Mi web de humor al baño María: http://www.demogracia.com
--
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #5 (permalink)  
Old 05-24-2008, 07:10 AM
Shakespeare
 
Posts: n/a
Default Re: Fetch table names from query


""Álvaro G. Vicario"" <alvaroNOSPAMTHANKS@demogracia.com> schreef in bericht
news:g139q7$j7j$1@huron.algomas.org...
> Dan Blum escribió:
>>> This is horrifying. Obsolete data is defined by an SLA with the customer
>>> not by whether it is accessed.

>
>> I think he means he wants to identify obsolete data in his results cache,
>> so he can refresh it from the database, not delete data from the
>> database.

>
> Er... Yes, that's it. I can't even understand what Morgan means. A results
> cache must not be such a bad idea if many major DBMS implement it in
> recent versions, including Oracle itself.
>
>
>> However, I agree that this is not a wonderful idea, as it is essentially
>> recreating Oracle functionality. If results caching is that critical,
>> I would suggest running 11g, which implements it.

>
> However, the database server runs 10g. If I tell the customer that in
> order to run an auxiliary web reports application they need to buy a
> licence for 11g, upgrade their server, check that all existing apps
> (functions, stored procedures, ERP, several custom Oracle Forms utilities,
> online orders web site, backup system...) do not break... I'd say they
> won't be amused.
>
> So I assume the only way to obtaining table names is explain plan :-? I
> guess I'll stick to my PHP-side solution by now.
>
>
> --
> -- http://alvaro.es - Álvaro G. Vicario - Burgos, Spain
> -- Mi sitio sobre programación web: http://bits.demogracia.com
> -- Mi web de humor al baño María: http://www.demogracia.com
> --


You could make life a little bit simpler by storing relevant tablenames in a
table (!) and scanning your queries and cache for these names. Not 100%
accurate, but it might help a little.

Shakespeare


Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #6 (permalink)  
Old 05-24-2008, 07:10 AM
=?ISO-8859-1?Q?=22=C1lvaro_G=2E_Vicario=22?=
 
Posts: n/a
Default Re: Fetch table names from query

Shakespeare escribió:
> You could make life a little bit simpler by storing relevant tablenames in a
> table (!) and scanning your queries and cache for these names. Not 100%
> accurate, but it might help a little.


Actually, that's exactly my current PHP-side solution ;-)

<?php

$regex_tables = implode('|', $tables); // $tables contains table names
$regex = '/\W(FROM|JOIN)\s+(' . $regex_tables . ')(?:\W|$)/i';
preg_match_all($regex, $sql, $matches);

if(isset($matches[2]) && count($matches[2])>0){
$tables = array_unique($matches[2]);
sort($tables);
}

?>



--
-- http://alvaro.es - Álvaro G. Vicario - Burgos, Spain
-- Mi sitio sobre programación web: http://bits.demogracia.com
-- Mi web de humor al baño María: http://www.demogracia.com
--
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #7 (permalink)  
Old 05-24-2008, 07:10 AM
DA Morgan
 
Posts: n/a
Default Re: Fetch table names from query

Dan Blum wrote:
> DA Morgan <damorgan@psoug.org> wrote:
>> ?lvaro G. Vicario wrote:
>>> Is there any simple way to extract the table names of a given SELECT
>>> query without actually running it?
>>>
>>> I've implemented a very simple results cache in my PHP application but
>>> I'd like to improve it. And one of the key points is finding out what
>>> tables a query reads from so I can handle obsolete data. Writing a
>>> reliable SQL parser in PHP looks like a hard task and obtaining a full
>>> explain plan from the Oracle server looks like an overkill.
>>>
>>> Any ideas?
>>>
>>> Thank you in advance,

>
>> This is horrifying. Obsolete data is defined by an SLA with the customer
>> not by whether it is accessed.

>
>> For example I have organizations here in the US that are, by law,
>> required to keep data online for 7 years. It hopefully will never be
>> accessed. But on audit, if it isn't there, they are in a boatload of
>> trouble.

>
>> This is a really bad idea, for many reasons, you should drop
>> immediately. Leave managing the database to the database professionals.
>> It is not something someone writing PHP should involve themselves in.

>
> I think he means he wants to identify obsolete data in his results cache,
> so he can refresh it from the database, not delete data from the database.
>
> However, I agree that this is not a wonderful idea, as it is essentially
> recreating Oracle functionality. If results caching is that critical,
> I would suggest running 11g, which implements it.


Then, assuming we are talking about 11g, which is the only version that
has a result cache that is automatically implemented by Oracle and not
subject to developer meddling except via the DBMS_RESULT_CACHE built-in
package. http://www.psoug.org/reference/dbms_result_cache.html
--
Daniel A. Morgan
Oracle Ace Director & Instructor
University of Washington
damorgan@x.washington.edu (replace x with u to respond)
Puget Sound Oracle Users Group
www.psoug.org
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
  #8 (permalink)  
Old 05-29-2008, 10:41 AM
Frank van Bortel
 
Posts: n/a
Default Re: Fetch table names from query

Álvaro G. Vicario wrote:
> Dan Blum escribió:
>>> This is horrifying. Obsolete data is defined by an SLA with the customer
>>> not by whether it is accessed.

>
>> I think he means he wants to identify obsolete data in his results cache,
>> so he can refresh it from the database, not delete data from the
>> database.

>
> Er... Yes, that's it. I can't even understand what Morgan means. A
> results cache must not be such a bad idea if many major DBMS implement
> it in recent versions, including Oracle itself.
>
>
>> However, I agree that this is not a wonderful idea, as it is essentially
>> recreating Oracle functionality. If results caching is that critical,
>> I would suggest running 11g, which implements it.

>
> However, the database server runs 10g. If I tell the customer that in
> order to run an auxiliary web reports application they need to buy a
> licence for 11g, upgrade their server, check that all existing apps
> (functions, stored procedures, ERP, several custom Oracle Forms
> utilities, online orders web site, backup system...) do not break... I'd
> say they won't be amused.
>

Consider Web cache (which you probably have,
but not installed/activated?)

--

Regards,
Frank van Bortel
Digg this Post!Add Post to del.icio.usBookmark Post in TechnoratiFurl this Post!
Reply With Quote
Reply


Thread Tools
Display Modes

Posting Rules
You may not post new threads
You may not post replies
You may not post attachments
You may not edit your posts

vB code is On
Smilies are On
[IMG] code is On
HTML code is Off
Trackbacks are On
Pingbacks are On
Refbacks are On
Forum Jump


All times are GMT. The time now is 07:59 AM.


Powered by vBulletin® Version 3.6.5
Copyright ©2000 - 2008, Jelsoft Enterprises Ltd.
Search Engine Optimization by vBSEO 3.2.0
www.UnixAdminTalk.com