DBI and modules

From: Simon Taylor (set_at_nortelnetworks.com)
Date: 10/17/03


To: "'dbi-users@perl.org'" <dbi-users@perl.org>
Date: Fri, 17 Oct 2003 16:22:24 +0100

I am trying to create a module that sets ups environment variables from
another module, creates a database handle and passes it back to the calling
script.
I understand that an object exists as long as there is a reference to it but
cant quite see why this code generates the following errors when it tries to
destroy the dbh even though it is always an object in the hash? No doubt I
am confused about a fundamental here.

Issuing rollback() for database handle being DESTROY'd without explicit
disconnect() at ./poe_ctrl.pl line 38.
$VAR1 = bless( {
                 '_dbh' => bless( {}, 'DBI::db' )
               }, 'SDU::DB' );
Issuing rollback() for database handle being DESTROY'd without explicit
disconnect().

----------------------------------------------------------------------------
----------------------------------------------------------------------------
------------------
Script to create the connection poe_ctrl.pl

use warnings;
use strict;
use Data::Dumper;
use POE qw(Wheel::Run Filter::Reference);
use SDU::CommandIterator;
use SDU::DB;
use SDU::Config;
sub MAX_CONCURRENT_TASKS () { 5 }

# Create database connection
my $dbh = SDU::DB->new;
print Dumper($dbh);
exit;

----------------------------------------------------------------------------
----------------------------------------------------------------------------
--------------------
Package to create the connection

package SDU::DB;
require 5.008 ;
use SDU::Config;
use strict;
use Carp;
use Carp qw(cluck);
use DBI;
use DBI qw(:sql_types);
use DBD::Oracle;
use DBD::Oracle qw(:ora_types);
use TNBException;

sub new {
  my $class = shift;
  my $SC = SDU::Config->new;
  my $DB = { _dbh => &ConnectToOracle($SC)
               };
  my $DC = &ConnectToOracle($SC);
  my $self = bless $DB, $class;
  return $self;
}

sub ConnectToOracle{
    my ($SC) = @_;
    $ENV{ORACLE_HOME}=$SC->{ORA_HOME};
    $ENV{TWO_TASK}=$SC->{ORA_SID};
    $ENV{ORACLE_SID}=$SC->{ORA_SID};
    my $combined=$SC->{ORA_USER}."@".$SC->{ORA_SID};
    my $trace_level=0;
    my $dbh = undef;
    $dbh = DBI->connect('dbi:Oracle:',$combined , $SC->{ORA_PASS}) or throw
TNBCriticalException($dbh->errstr);
    $dbh->func( 1000000, 'dbms_output_enable' );
    $dbh->{RaiseError} = 1;
    $dbh->{PrintError} = 0;
    $dbh->{AutoCommit} = 0;
    $dbh->trace($trace_level);
    return $dbh;
}

1;

Simon Taylor
Managed Services Technology Consultant
Nortel Networks
p - 01279 404289 (ESN 742 4289)
m - 07740 533743 (ESN 748 3743)
e - set@nortelnetworks.com

"I code therefore I am"



Relevant Pages

  • Re: Apache mod_rewrite/RewriteMap prg: and perl script
    ... > input for some hours and then go on (especially if the database is on ... > a remote box - tcp connection might have gone dead for whatever ... What *does* happen is that the script gets garbled. ... different garble each time you hit it. ...
    (comp.unix.admin)
  • Re: ADO Connection Timeout
    ... so what happens when a connection failure forces one station to revert ... to a local database? ... Further, you *will* have contention issues, Jet does not support record ... to the central server, but you are willing to live with periods where it ...
    (microsoft.public.data.ado)
  • Need help with ASP script.
    ... the beginning process of having a webpage that will direct students to ... I had downloaded a free ASP script which basically uses a ... 'Check the database to see if user exsits and read in there password ... 'Database connection info and driver ...
    (microsoft.public.inetserver.asp.general)
  • Re: Difference between storing files on folder and in mysql db
    ... a separate instance of an image display script (and a separate ... connection if images were stored in the file system. ... know or care if the image is from a database or not. ... but the DB server does. ...
    (comp.lang.php)
  • Re: Management Studio: DB Context: Script Opens a new connection - How do I get script to reuse
    ... > When I was opening up a script to apply to a database, ... > was always opening a new connection to the Master Database. ... > what was happening was each script opens a new connection to the master ...
    (microsoft.public.sqlserver.security)