Hi all!

I am seeking some advice.

I need to be able to drop several thousand (more like .25 million) tables from 
a database using DBI.

I've got a simple script that works but it is quite slow...

The SLOW typical version:
   while (my @rows = $sth->fetchrow_array) {  # Get the list of tables to drop 
from the a simple SQL query.
      my ($tablename) = @rows;
      $dbh->do("drop table $db.$tablename") or die $sql->errstr;
   }

My next attempt:
      $dbh->do("drop table1; drop table2; ... drop tableN;")
-- fails!  Apparently I can't do multi-statements ??

My next attempt:
      $sth = $dbh->prepare("DROP TABLE ?") or die $sth->errstr;
      $sth->bind_param_array(1,\@list_of_tables_to_drop);
      my $result = $sth->execute_array({}) or die $sth->errstr;

Also fails!  I've tried many variations of the execute_array function (with and 
without bind_param_array()), with and without { ArrayTupleStatus => \my 
@tuple_status }).  Maybe I just don't really get how to specify the params? - 
Tried Google + documentation  - I'm still confused!

The real question (before I try to determine my code issue):

What is the best typical approach when trying to get non-select statements to 
run faster?  Am I going down the right path?

Thanks all!

--Dan

BTW, DBI version is 1.615 using DBD::Teradata driver.

Reply via email to