You disconnected after the first ping, so the second ping failed as the
output showed.

The second version just handled this condition, and went on to excute the
next statement, ie 'Finished work' not 'OK2'

-----Original Message-----
From: Andrei A. Voropaev [mailto:[EMAIL PROTECTED]]
Sent: Wednesday, November 21, 2001 8:51 PM
To: [EMAIL PROTECTED]
Subject: DBD::Oracle ping terminates script


Hi!

I have hit very weird problem with method 'ping' of DBD::Oracle. Here's
small script that illustrates it.

---------------------------
#!/usr/bin/perl
use DBI;

my $dbh= DBI->connect('dbi:Oracle:mydb', 'myuser', 'mypass', {RaiseError =>
1, PrintError => 1, AutoCommit => 0});
die unless $dbh;

print "OK 1\n" if $dbh->ping;

$dbh->disconnect;

print "OK 2\n" if $dbh->ping;
print "Finished work\n";
---------------------------------

This script never prints out "Finished work". Instead it only prints 
"DBD::Oracle::db ping failed: ERROR Database disconnected at test.pl line
11"
and dies afterwards.

The weird part is that the script

---------------------------
#!/usr/bin/perl
use DBI;

my $dbh= DBI->connect('dbi:Oracle:mydb', 'myuser', 'mypass', {RaiseError =>
1, PrintError => 1, AutoCommit => 0});
die unless $dbh;

print "OK 1\n" if $dbh->ping;

$dbh->disconnect;

print "OK 2\n" if ping($dbh);
print "Finished work\n";

    sub ping {
        my($dbh) = @_;
        my $ok = 0;
        warn "New ping\n";
        eval {
            local $SIG{__DIE__};
            local $SIG{__WARN__};
            # we know that Oracle 7 prepare does a describe so this will
            # actually talk to the server and is this a valid and cheap
test.
            my $sth =  $dbh->prepare("select SYSDATE from DUAL /* ping */");
            # But Oracle 8 doesn't talk to server unless we describe the
query
            $ok = $sth && $sth->FETCH('NUM_OF_FIELDS');
        };
        return ($@) ? 0 : $ok;
    }

---------------------------------

works the way it is expected. Namely prints output
OK 1
Finished work

That's exactly the same ping function just copied to my own namespace!
I'm not subscribed to the list yet, so if some more information is needed
then
please email to me directly.

$DBD::Oracle::VERSION = '1.07';

Summary of my perl5 (revision 5.0 version 6 subversion 0) configuration:
  Platform:
    osname=linux, osvers=2.2.17-8smp, archname=i386-linux
    uname='linux porky.devel.redhat.com 2.2.17-8smp #1 smp fri nov 17
16:12:17 est 2000 i686 unknown '
    config_args='-des -Doptimize=-O2 -march=i386 -mcpu=i686 -Dcc=gcc
-Dcccdlflags=-fPIC -Dinstallprefix=/usr -Dprefix=/usr -Darchname=i386-linux
-Dd_dosuid -Dd_semctl_semun -Di_db -Di_ndbm -Di_gdbm -Di_shadow -Di_syslog
-Dman3ext=3pm -Uuselargefiles'
    hint=recommended, useposix=true, d_sigaction=define
    usethreads=undef use5005threads=undef useithreads=undef
usemultiplicity=undef
    useperlio=undef d_sfio=undef uselargefiles=undef
    use64bitint=undef use64bitall=undef uselongdouble=undef usesocks=undef
  Compiler:
    cc='gcc', optimize='-O2 -march=i386 -mcpu=i686', gccversion=2.96
20000731 (Red Hat Linux 7.1 2.96-79)
    cppflags='-fno-strict-aliasing'
    ccflags ='-fno-strict-aliasing'
    stdchar='char', d_stdstdio=define, usevfork=false
    intsize=4, longsize=4, ptrsize=4, doublesize=8
    d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=12
    ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t',
lseeksize=4
    alignbytes=4, usemymalloc=n, prototype=define
  Linker and Libraries:
    ld='gcc', ldflags =' -L/usr/local/lib'
    libpth=/usr/local/lib /lib /usr/lib
    libs=-lnsl -ldl -lm -lc -lcrypt
    libc=/lib/libc-2.2.2.so, so=so, useshrplib=false, libperl=libperl.a
  Dynamic Linking:
    dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags='-rdynamic'
    cccdlflags='-fPIC', lddlflags='-shared -L/usr/local/lib'


Characteristics of this binary (from libperl):
  Compile-time options:
  Built under linux
  Compiled at Mar 23 2001 12:49:50
  @INC:
    /usr/lib/perl5/5.6.0/i386-linux
    /usr/lib/perl5/5.6.0
    /usr/lib/perl5/site_perl/5.6.0/i386-linux
    /usr/lib/perl5/site_perl/5.6.0
    /usr/lib/perl5/site_perl
    .
Australia Post is committed to providing our customers with excellent service.  If we 
can assist you in any way please either telephone 13 13 18 or visit our website 
www.auspost.com.au.

CAUTION

This e-mail and any files transmitted with it are privileged and confidential 
information intended for the use of the addressee. The confidentiality and/or 
privilege in this e-mail is not waived, lost or destroyed if it has been transmitted 
to you in error. If you have received this e-mail in error you must (a) not 
disseminate, copy or take any action in reliance on it; (b) please notify Australia 
Post immediately by return e-mail to the sender; and (c) please delete the original 
e-mail.

Reply via email to