I've cobbled together a short PERL script to delete older records from the
tables in a database.  The DELETE works fine but when I try to put in a
statement to return the number of rows deleted, I get an error.

The code reads as follows:

sub run_query {
#  print "Query: ", $statement, "\n";
  my $sth = $dbh->do($statement)
    or die "Can't prepare $statement: $dbh->errstr\n";
  $numrows = ($sth->rows); # This is where the problem is
  print $numrows;
}

$dbh= DBI->connect("DBI:mysql:$db:host=$host", $user, $pass);

$statement="SELECT rid FROM router";
#  print "Query: ", $statement, "\n";
$sth = $dbh->prepare($statement)
  or die "Can't prepare $statement: $dbh->errstr\n";
$rv = $sth->execute
  or die "Can't execute the query: $sth->errstr\n";
while (@row = $sth->fetchrow_array ())
{
  push (@rid, $row[0]);
}

foreach $rid (@rid) {

  $statement="DELETE FROM ifInOctets_$rid WHERE dtime < '$deldate
$deltime'";
  &run_query($statement);
  print "$statement\t$numrows\n";

  $statement="DELETE FROM ifOutOctets_$rid  WHERE dtime < '$deldate
$deltime'";
  &run_query($statement);
  print "$statement\n";

  $statement="DELETE FROM ifInErrors_$rid WHERE dtime < '$deldate
$deltime'";
  &run_query($statement);
  print "$statement\n";

  $statement="DELETE FROM ifInUcastPkts_$rid  WHERE dtime < '$deldate
$deltime'";
  &run_query($statement);
  print "$statement\n";

  $statement="DELETE FROM ifOutUcastPkts_$rid WHERE dtime < '$deldate
$deltime'";
  &run_query($statement);
  print "$statement\n\n";

}
The error message is:

Can't call method "rows" without a package or object reference at
./cleandb.pl line 34.

Could someone please kindly point out the glaringly obvious thing that I'm
missing?

Thanks,

Jack

Jack Coxen
IP Network Engineer
TelCove
712 North Main Street
Coudersport, PA 16915
814-260-2705

Reply via email to