$dbh->do($sql);
I would get rid of the disconnect as well, since I assume you still want to be connected to the database when you do this. Also you probably want to change this:
if ($table_name = $Table_4){
to something more like this:
if ($table_name eq $Table_4){
| [reply] [Watch: Dir/Any] [d/l] [select] |
Well, you have
$dbh->disconnect();
before the second sql statement, so you are no longer connected to the database when you try to create the second table.
| [reply] [Watch: Dir/Any] [d/l] |
I tried removing that before and it gave me the error message:
Can't call method "do" on an undefined value at ....
| [reply] [Watch: Dir/Any] [d/l] |
my $dbh->do(...) Aha... You didn't open your database handle, did you? ;-)
You have to make sure there is a database connection before issuing SQL commands. If you do not call DBI->connect, your database handle will be undefined. In your case, you have created a new lexical with my $dbh in your second part of the code, which will be undefined unless you call the connect, or use the existing handle by dropping that my in front of $dbh->do(...) (assuming that you have dropped that first $dbh->disconnect of course). Here's an example on how to connect to the database using DBI and DBD.
#!/usr/bin/perl -w
use strict;
use DBI;
use DBD::Sybase;
my $dbh = DBI->connect("dbi:Sybase:server=XXXX;database=XXXX", "USER",
+"PASSWD")
or die "Failed to connect to the database!";
my $sth = $dbh->prepare( qq{ SQL statement } );
$sth->execute();
my @column_headings = @{$sth->{NAME}};
while (my @row = $sth->fetchrow())
{
# Data elements $row[0] ... $row[-1]
...
}
$sth->finish;
$dbh->disconnect;
| [reply] [Watch: Dir/Any] [d/l] [select] |