DBD::Oracle 1.22 Released

Posted in: Technical Track

The latest release of DBD::Oracle is now ready and can be found at: CPAN DBD::Oracle. It is a Perl module that works with the DBI module to provide access to Oracle databases. It is maintained by me, John Scoles, under the auspices of The Pythian Group as open source/free software.

This release is largely a maintenance release that fixes a number of bugs (new and old) and cleans up the POD. I have also spent a good deal of time cleaning up the tests, compile warnings, and the Makefile.PL. A thank-you goes out to Martin Evans and H. Merijn Brand for their help on that.

As for new items, the ORA_VERBOSE attribute was added so that you can debug/trace DBD::Oracle without seeing any DBI debug/trace output. OCILobGetLength was added to the LOB functions, thanks to Milo van der Leij, I have also dropped support for Oracle 8 and earlier clients; see the POD for details on this.

Finally, I have also cleaned up and expanded how persistent LOBs work. A thank-you to Eric Simon for his work on this.

The release has been fully tested with version (1.601) of DBI. Below is the list of the changes and/or fixes in this release.

Changes in DBD-Oracle 1.22 (svn rev 11618) 1st Aug 2008

  • Patch to remove compiler warnings. From H. Merijn Brand.
  • Patch to Makefile for 64bit boxes. From Alex Laslavic.
  • Added OCILobGetLength to lob functions. From Milo van der Leij.
  • Updated READMEs to state that the test user has to have create, call, and drop-a-procedure privileges. By John Scoles suggested by Gisle Aas.
  • Patch to Makefile to prevent the installation of the lib/DBD/mkta.pl file. From Gisle Aas.
  • Added new test, 31lob_extended.t for use of LOBs when returned via stored procedures with bind_param_inout. From Martin Evans.
  • Update to connection part of POD. From John Scoles.
  • Fix to test suite to bring it up to standard. From Martin Evans
  • Fix for memory hemorrhage in bind_param_inout_array, found by Ricky Egeland. Fix by John Scoles.
  • Fix for a typo in oracle.xs. From Milo van der Leij.
  • Fix for bugs on SPs with lobs, reported by Martin Evans. Fix by John Scoles.
  • Changed the way ping works — rather than using prepare and execute it now makes a single round trip call to DB. By John Scoles.
  • Fix for rt.cpan.org Ticket #=37501: fail HP-UX Itanium 11.31 makefile also added the OS and version to the output of the Makefile.PL for easier debugging. From John Scoles and Rich Roemer.
  • Added a number of internal functions for decoding OCI debug values. From John Scoles.
  • Fix for hpux 11.23 linker error, unrecognized argument on the Makefile. From someone on CPAN forum.
  • Added fetch by piece for lobs, fixed persistent lobs and expanded their usage for LONG and LONG RAW, and changed to pod to reflect the changes. From John Scoles.
  • Added comment to POD on case sensitivity of ORACLE environment variables. Suggested by Gerhard Lausser.
  • Added patch to fix a number of harmless, but annoying GCC warnings. From Eric Simon.
  • Added (finally) ora_verbose for DBD-only tracking. From John Scoles, and with thanks to H.Merijn Brand.
  • Fix for rt.cpan.org Ticket #=32396. From John Scoles.
  • Fix for memory leak that sneaked into 1.21. From John Scoles.
  • Fix for rt.cpan.org Ticket #=36069: Problem with synonym. From John Scoles.
  • Fix for rt.cpan.org Ticket #=28811: ORA_CHAR(s) not returning correct length in functions and procedures. From John Scoles.
  • Makefile.PL now working without flags for Linux instant client and regular client. From John Scoles, Andy Sautins, H.Merijn Brand, Nathan Vonnahme, and Karun Dutt
  • Fixed how persistent lob fetch works; now uses callback correctly. From John Scoles and Darren Kipp.


Want to talk with an expert? Schedule a call with our team to get the conversation started.

6 Comments. Leave new


Thank you for the work you put in to this latest release. Would you mind explaining the reasoning behind the changes you made to the ping method?

I ask because one of our DBAs has singled out “select sysdate from dual” as the root cause of why our Oracle database has these random pauses intermittently. I believe the explanation was that because “Select sysdate from dual” is not able to use bind variables, it is parsed every time it executes, causing oracle shared memory to dynamically expand to accomodate “all the versions of this statement”, and in turn, causing delays for other sessions.

Would you mind commenting? I’m not sure I’ve made up my mind on this one yet and value your input. We are currently rolling v1.22 into production since the ping method has been changed, but if i’m reading the code correctly, we might just be substituting “select sysdate from dual” for a call to OCIServerVersion.

Perl DBD::Oracle 1.22 Released (Christopher Jones on OPAL)
August 15, 2008 8:41 pm

[…] John Scoles has just released DBD::Oracle 1.22 for Perl. His release note and change list are at https://www.pythian.com/blogs/1151/dbdoracle-122-released. […]


Yes, I have changed the code to OCIServerVersion, which will make 1 round trip to the server which in turn will keep the connection alive. This is how it is supposed to work. The original patch for for Apache::DBI was a quick hack in perl only. The 1.22 version will, I hope, use much fewer server resources, and eliminate all the problems encountered with expanding memory.

I am currently working on a new mod that will take advantage of Oracle’s own pooling system. You might want to help out with it.



I was wondering if there will be any compatibility issues when I try to install DBD::Oracle on my 64 bit machine. Perl now has a 64 bit solution and after reading throught the README.64bit.txt file for DBD::Oracle, I learned that there were problems when using a 32 bit Perl interpretor to install DBD::Oracle. If I have a 64 bit machine, 64 bit Oracle, and 64 bit Perl, will I have any issues when trying to install DBD::Oracle???


Sort answer: yes with a but!
Long answer: no with a maybe!

Your best bet is to give is a go and see what happens. If you run into trouble (I mean, “when”), post your question to [email protected] You should get plenty of help there.


Thank you!


Leave a Reply

Your email address will not be published. Required fields are marked *