Perlers,

 

ActiveState Perl 5.8.2

MS SQL Server 2000 SP3

 

I'm working on a script that finds tables in a database and then prints
out the results of a stored procedure run against each of them.  There
are some tables that the DBD::ODBC driver complains don't exist.  They
do, but they're temporary and inconsequential.  I need to be able to
skip past them when I encounter the error but I'm not sure how to do
that.  Here's my code:

 

use warnings;

use strict;

 

use DBI;

# We need the DBD::ODBC driver...

 

# specify my data source; we're dependent on a user- or system-DSN, for
now...

my $dataSource = "WH_PROD";

 

my $dbh = DBI->connect("DBI:ODBC:$dataSource");

die "Unable to connect to $dataSource: $DBI::errstr\n" unless (defined
$dbh);

 

# find tables

my $sth_tables = $dbh->table_info( '', '', '%', 'TABLE' )

  or die "Unable to prepare statement: $dbh->errstr\n";

 

my @tables;

while ( my @row = $sth_tables->fetchrow_array ) {

  my ( $database, $owner, $tableName, $tableType ) = @row;

  #print "$tableName\n";

  push @tables, $tableName;

}

 

# find the amount of space used by each table

foreach ( @tables ) {

  my $sth_space = $dbh->prepare("exec sp_spaceused $_")

    or die "Unable to prepare statement: $dbh->errstr\n";

  print "\n";

  $sth_space->execute;

 

  while ( my @row = $sth_space->fetchrow_array ) {

    my ( $tableName, $numRows, $reservedSpace, $dataSize, $indexSize,
$unusedSpace ) = @row;

    print "Table:\t\t$tableName\n";

    print "Number of rows: $numRows\n";

    print "Reserved Space: $reservedSpace\n";

    print "Data Size:\t$dataSize\n";

    print "Index Size:\t$indexSize\n";

    print "Unused Space:\t$unusedSpace\n";

  }

}

 

$dbh->disconnect;

 

I get the following example error on "missing" tables:

 

DBD::ODBC::st execute failed: [Microsoft][ODBC SQL Server Driver][SQL
Server]The object 'ExportTemp' does not exist in database 'WH_PROD'.
(SQL-42000)(DBD: st_execute/SQLExecute err=-1) at sp.pl line 32.

 

I tried the following:

 

my $good = ( $sth_space->execute );

if ( $good ) {

  ...

}

 

But Perl complained thusly:

 

Can't call method "fetchrow_array" without a package or object reference
at sp.pl line 35.

 

Since I'm still studying references, I'm not sure how to proceed.
What's the best way to check the return of that method?

 

ry

Reply via email to