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().

Reply via email to