Stories
Slash Boxes
Comments
NOTE: use Perl; is on undef hiatus. You can read content, but you can't post it. More info will be forthcoming forthcomingly.

All the Perl that's Practical to Extract and Report

use Perl Log In

Log In

[ Create a new account ]

Buck (2837)

Buck
  buck@buckpyland.com
http://www.buckpyland.com/
AOL IM: BuckPyl (Add Buddy, Send Message)

Is there anything I haven't worked on/with? 8) I like Perl because it let's me code the way I think. Scary, huh?

Journal of Buck (2837)

Tuesday May 18, 2004
03:49 PM

Frustration with DBD::ADO and Oracle

[ #18811 ]

I've been trying to use DBD::ADO 2.84 (the latest available via ActiveState PPM). I wrote up a simple script to perform a SELECT from Oracle 8.1.7:

use strict;
use DBI qw(:sql_types);

my $userid = "****";
my $password = "****";
my $sql = 'SELECT SYSDATE FROM DUAL';
my $dsn = "Provider=OraOLEDB.Oracle;Data Source=****;";

unlink 'dbitrace.log' if -e 'dbitrace.log';
DBI->trace(1, 'dbitrace.log');

my $dbh = DBI->connect("dbi:ADO:$dsn", $userid, $password,
    { RaiseError => 1, AutoCommit => 0 });

my $sth = $dbh->prepare($sql);
$sth->execute();
$sth->dump_results();
$sth->finish();
$dbh->disconnect();

Up to the execute(), it's OK. I then get the error:

>perl -w OneWorld_Table_Description.pl
Use of uninitialized value in subroutine entry at E:/Perl/site/lib/DBI.pm line 587.
DBD::ADO::st execute failed: Can't execute statement 'SELECT SYSDATE FROM DUAL':
    Description : Multiple-step operation completed with one or more errors. Check each status value.
    HelpContext :
       HelpFile :
    NativeError :
         Number : 265946
         Source : OraOLEDB
       SQLState :
     at OneWorld_Table_Description.pl line 42.
DBD::ADO::st execute failed: Can't execute statement 'SELECT SYSDATE FROM DUAL':
    Description : Multiple-step operation completed with one or more errors. Check each status value.
    HelpContext :
       HelpFile :
    NativeError :
         Number : 265946
         Source : OraOLEDB
       SQLState :
     at OneWorld_Table_Description.pl line 42.
>Exit code: 255

The output from the DBI trace (level 1):

    DBI 1.42-ithread default trace level set to Ox1/0 (in pid 1876)
    -> DBI->connect(dbi:ADO:Provider=OraOLEDB.Oracle;Data Source=****;, ****, ****, HASH(0x15d5700))
    -> DBI->install_driver(ADO) for MSWin32 perl=5.008003 pid=1876 ruid=0 euid=0
       install_driver: DBD::ADO version 2.84 loaded from E:/Perl/site/lib/DBD/ADO.pm
    <- install_driver= DBI::dr=HASH(0x1b57384)
->ADO Connection:     <- STORE('Provider' 'OraOLEDB.Oracle')= 'OraOLEDB.Oracle' at ADO.pm line 146
->> Storing Provider OraOLEDB.Oracle
->> Open ADO connection using Data Source=****
->> Transaction support: 2 Transactions can contain DML statements.  DDL statements within a transaction cause the transaction to be committed.
1   <> FETCH('Warn')= 0 ('Warn' from cache) at ADO.pm line 1290
    <- STORE('Active' 1)= 1 at ADO.pm line 208
1   <> FETCH('AutoCommit')= 1 ('AutoCommit' from cache) at ADO.pm line 1301
1   <> FETCH('Warn')= 0 ('Warn' from cache) at ADO.pm line 1290
    <- connect= DBI::db=HASH(0x1cc814c)
1   <> FETCH('Warn')= 0 ('Warn' from cache) at ADO.pm line 1290
    <- STORE('LongReadLen' 0)= 1 at ADO.pm line 450
    <- STORE('LongTruncOk' 0)= 1 at ADO.pm line 451
    <- STORE('RowsInCache' 0)= 0 at ADO.pm line 456
    <> FETCH('ado_conn')= Win32::OLE=HASH(0x1cc847c) ('ado_conn' from cache) at ADO.pm line 1384
    <> FETCH('ado_comm')= Win32::OLE=HASH(0x15d57c0) ('ado_comm' from cache) at ADO.pm line 1385
    <> FETCH('Statement')= ( 'SELECT SYSDATE FROM DUAL' ) [1 items] ('Statement' from cache) at ADO.pm line 1387
    <- STORE('NUM_OF_PARAMS' 0)= 1 at ADO.pm line 1404
1   <> FETCH('Statement')= 'SELECT SYSDATE FROM DUAL' ('Statement' from cache) at ADO.pm line 1459
    !! ERROR: -1 'Can't execute statement 'SELECT SYSDATE FROM DUAL':
    Description : Multiple-step operation completed with one or more errors. Check each status value.
    HelpContext :
       HelpFile :
    NativeError :
         Number : 265946
         Source : OraOLEDB
       SQLState :
    ' (err#1)
1   <- set_err(-1 'Can't execute statement 'SELECT SYSDATE FROM DUAL':
    Description : Multiple-step operation completed with one or more errors. Check each status value.
    HelpContext :
       HelpFile :
    NativeError :
         Number : 265946
         Source : OraOLEDB
       SQLState :
    ')= undef at ADO.pm line 1568
<- destroy statement handler
-> destroy statement handler
    -- State: 1
    -- Modified ADO Connection Attributes: 0
    -- AutoCommit: 0, Provider Support: 2, Comments: Transactions can contain DML statements.  DDL statements within a transaction cause the transaction to be committed.

I'm running 5.8.3.809 of ActiveState's Perl. I looked on perl.dbi.users with no luck. I'd post this to the list, but my company's spam filter would snarf it. :( Any ideas?

Update (21-May-2004): I tried to build DBD::Oracle via CPAN. It failed tests on long and ph_types which included a Memory Violation. Long story short, I downgraded to ActiveState's 5.6.1 build 638, and installed the latest available DBI amd DBD::Oracle via PPM. Now, I'm "shittin' in tall cotton". :) Thanks, to everyone who commented.

The Fine Print: The following comments are owned by whoever posted them. We are not responsible for them in any way.
 Full
 Abbreviated
 Hidden
More | Login | Reply
Loading... please wait.
  • I'd avoid using OraOLEDB altogether. (An Oracle product working nicely on MS? What will they think of next?)

    May seem silly, but why aren't you using DBD::Oracle? It works fine on Win32....

    • Not so silly as the answer. While it does work fine on Win32, ActiveState *STILL* won't make it available via PPM. I've already fought that battle and lost.
      --
      Buck
      • Isn't it that Oracle's license doesn't allow anyone to redistribute the client libs?
        • According to ActiveState's list (the URL escapes me), the build failed on Win32. I'm gonna try it via CPAN just because I'm persistent in a masochistic sort of way. :)
          --
          Buck
  • Get another (temporary) e-mail (web-mail) out there and post the list. There's plenty of sites to chose from.
    • I found out my ISP for my home account has a webmail interface, so I used it and got myself subscribed. Thanks.
      --
      Buck