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.