I believe a describe statement is Oracle DDL, but I still failed for
both of the ways that I know of to execute sql. There must be something
that I am not considering.
#!/usr/local/bin/perl
#script to demonstate execution failure
use strict;
use warnings;
use DBI;
use DBD::Oracle;
my $username='';
my $password='';
my $dbsid='';
my $cont;
eval {
$cont = DBI->connect('dbi:Oracle:' . lc($dbsid), $username,
$password,
{
RaiseError => 1,
AutoCommit => 0,
ora_session_mode => 0
}
);
};
die "problem" if ($@);
my $sth;
#1
eval {
$sth = $cont->prepare("desc user_tables");
};
if ($@) {
print "$DBI::errstr";
#exit;
} else {
eval {
$sth->execute;
};
if ($@) {
print "$DBI::errstr";
#exit;
}
}
#2
eval {
$cont->do("desc user_tables");
};
if ($@) {
print "$DBI::errstr";
#exit;
}
# Windows XP
# DBI 1.48
# DBD-Oracle 1.16
# ActivePerl 5.8.7 build 813
DBD::Oracle::st execute failed: ORA-00900: invalid SQL statement (DBD
ERROR: OCIStmtExecute) [for Statement "desc user_tables"] at
C:\DATA\SESS_KILL\DBD-DBI_testing.pl line 37.
ORA-00900: invalid SQL statement (DBD ERROR: OCIStmtExecute) <--print output
DBD::Oracle::db do failed: ORA-00900: invalid SQL statement (DBD ERROR:
OCIStmtExecute) [for Statement "desc user_tables"] at
C:\DATA\SESS_KILL\DBD-DBI_testing.pl line 48.
ORA-00900: invalid SQL statement (DBD ERROR: OCIStmtExecute) <--print output
Issuing rollback() for database handle being DESTROY'd without explicit
disconnect().