[SGVLUG] Meta-querying (perhaps OT...)

Jeremy Leader jleader at alumni.caltech.edu
Tue Jul 8 09:45:11 PDT 2008


Most SQL databases also provide a set of meta-data tables describing the 
tables, columns, indexes, etc. in the database.  Unfortunately, I don't 
think the names or layouts of these meta-tables are completely 
standardized, so you'd have to poke around your particular database a bit.

-- 
Jeremy Leader
jleader at alumni.caltech.edu

Matt Campbell wrote:
> This was an example of what to do, not a prepackaged solution, there is 
> a charge for the latter.   ;)
> 
>  
> 
> You can use the ‘show tables;’ command once you have connected to a 
> database to list all the tables.
> 
> Once you have a list of the tables and each table’s columns you can 
> either inspect them visually, or use Perl to search for any pattern of 
> the column names you wish to.  You can use the provided code to report 
> on all matching column names and extend it to report their data types.  
> Good luck, write if you find work….
> 
>  
> 
> Matt
> 
>  
> 
> P.S.  This is all included in the Perl DBI documentation and is derived 
> fairly simply therefrom.
> 
>  
> 
> # Return a pointer to an array of pointers to arrays containing column 
> names and data types for the given table
> 
> Sub listColumns {
> 
>                 my ($dbh, $table) = @_;
> 
>  
> 
>                 my $sth = $dbh->column_info(undef, undef, $table, undef);
> 
>                 unless (defined($sth)) {
> 
>                                 $error = "Error preparing column info 
> request: $DBI::errstr";
> 
>                                 return undef;
> 
>                 }
> 
>                 $sth->execute();
> 
>                 my $results = $sth->fetchall_arrayref;
> 
>                 my $ret = [];
> 
>                 foreach my $result (@$results) {
> 
>                                 $ret->[$result->[16] - 1] = [ 
> $result->[3], $result->[5] ];
> 
>                 }
> 
>                 return $ret;
> 
> }
> 
>  
> 
>  
> 
> *From:* sgvlug-bounces at sgvlug.net [mailto:sgvlug-bounces at sgvlug.net] *On 
> Behalf Of *Emerson, Tom (*IC)
> *Sent:* Monday, July 07, 2008 1:52 PM
> *To:* SGVLUG Discussion List.
> *Subject:* RE: [SGVLUG] Meta-querying (perhaps OT...)
> 
>  
> 
> If I'm reading this correctly (though mostly I'm inferring this from the 
> function name), it appears this lists all of the columns [fields] of the 
> dataset [table] "people" -- that isn't what I want, I'm after all the 
> tables that contain the column "first_name".  In addition, (and this is 
> the harder part), I'd like to know where the DBA chose to name the field 
> "FirstName", "fName", or simply "name"... [and, to a lesser extent, are 
> these all of compatible forms, i.e., "varchar(n)" where "n" is 
> consistent among instances...]
> 
>  
> 
> -----Original Message-----*Of *Matt Campbell
> 
>     You can do this easily in mySQL if you have privs to open the
>     database.  I don’t know how to do it in DB2 though.
> 
>      
> 
>      
> 
>     P.S.  The following is off the top of my head from some time ago so
>     it probably needs double checking.
> 
>     The basic function should work with any DB Perl has drivers for.
> 
>      
> 
>      [...] listTableColums($db, ‘people’);
> 
>      
> 
>     sub listTableColumns {
> 
>                     my ($db, $table) = @_;
> 
>      
> 
>      [...]
> 
>                     my $sth = $dbh->column_info(undef, undef, $table,
>     undef);
> 
>      
> 
>      
> 
>     *From:* sgvlug-bounces at sgvlug.net [mailto:sgvlug-bounces at sgvlug.net]
>     *On Behalf Of *Emerson, Tom (*IC)
>     *Sent:* Monday, July 07, 2008 12:04 PM
>     *To:* SGVLUG Discussion List.
>     *Subject:* [SGVLUG] Meta-querying (perhaps OT...)
> 
>      
> 
>     *This is more for the database guru's out there -- specifically, for
>     DB2: is there a way to perform a "meta" query on a database?  In
>     particular, I'd like to find out what tables contain a particular
>     field (by name, or possibly by structure as it's possible that the
>     "name" of the field isn't consistent across datasets)*
> 
>     [...]



More information about the SGVLUG mailing list