I tested your script on solaris 2.7, Oracle 8.1.7, and perl 5.6.0. Works fine here. Does simply connecting and disconnecting (using DBI) work? Tom (environment listed below) [tlowery@rain tlowery]$ perl -w core.pl Trying to open the ref cursor... These are the results from the ref cursor: TEST STRING Trying to close the ref cursor... preparing... binding... executing... finishing... The cursor is now closed [tlowery@rain tlowery]$ uname -a SunOS rain.networkmcs.com 5.7 Generic_106541-12 sun4u sparc SUNW,Ultra-4 [tlowery@rain tlowery]$ sqlplus / SQL*Plus: Release 8.1.7.0.0 - Production on Mon Mar 19 20:48:04 2001 (c) Copyright 2000 Oracle Corporation. All rights reserved. Connected to: Oracle8i Enterprise Edition Release 8.1.7.0.0 - Production With the Partitioning option JServer Release 8.1.7.0.0 - Production [tlowery@rain tlowery]$ perl -V Summary of my perl5 (revision 5.0 version 6 subversion 0) configuration: Platform: osname=solaris, osvers=2.7, archname=sun4-solaris uname='sunos golf.networkmcs.com 5.7 generic_106541-14 sun4u sparc sunw,ultra-4 ' config_args='' hint=recommended, useposix=true, d_sigaction=define usethreads=undef use5005threads=undef useithreads=undef usemultiplicity=undef useperlio=undef d_sfio=undef uselargefiles=define use64bitint=undef use64bitall=undef uselongdouble=undef usesocks=undef Compiler: cc='gcc', optimize='-O', gccversion=2.8.1 cppflags='-I/usr/local/include' ccflags ='-I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64' stdchar='char', d_stdstdio=define, usevfork=false intsize=4, longsize=4, ptrsize=4, doublesize=8 d_longlong=define, longlongsize=8, d_longdbl=define, longdblsize=16 ivtype='long', ivsize=4, nvtype='double', nvsize=8, Off_t='off_t', lseeksize=8 alignbytes=8, usemymalloc=y, prototype=define Linker and Libraries: ld='gcc', ldflags =' -L/usr/local/lib ' libpth=/usr/local/lib /lib /usr/lib /usr/ccs/lib libs=-lsocket -lnsl -ldl -lm -lc -lcrypt -lsec libc=/lib/libc.so, so=so, useshrplib=false, libperl=libperl.a Dynamic Linking: dlsrc=dl_dlopen.xs, dlext=so, d_dlsymun=undef, ccdlflags=' ' cccdlflags='-fPIC', lddlflags='-G -L/usr/local/lib' Characteristics of this binary (from libperl): Compile-time options: USE_LARGE_FILES Built under solaris Compiled at Jan 26 2001 09:42:37 @INC: /usr/local/lib/perl5/5.6.0/sun4-solaris /usr/local/lib/perl5/5.6.0 /usr/local/lib/perl5/site_perl/5.6.0/sun4-solaris /usr/local/lib/perl5/site_perl/5.6.0 /usr/local/lib/perl5/site_perl/5.005/sun4-solaris /usr/local/lib/perl5/site_perl/5.005 /usr/local/lib/perl5/site_perl . On Mon, Mar 19, 2001 at 04:47:03PM +0000, ucjtfmr wrote: > > Has anyone seen core dumps when disconnecting after closing an Oracle ref > cursor? > > We're trying to use the new feature introduced in DBD::Oracle 1.05, as > specified in the Changes file: > > > Added ability to pass existing DBD::Oracle select statement handle > > (cursor) back _into_ Oracle as a ref cursor type thanks to Mike Moretti. > > Note that this enables a workaround for closing ref cursors: > > $dbh->do("BEGIN CLOSE :cursor; END;", undef, $sth_ref_csr_to_close); > > Everything appears to work fine until we attempt to disconnect from the > database, when we get a core dump from perl. > > We haven't had any other problems or core dumps in "normal" DBI code. > > > > Our versions are as follows: > > dataserver: > > Oracle 8.0.6.0.0 RDBMS, running on Solaris 2.6 > > client: > > RedHat 6.2, Kernel 2.2.14-5.0 > > perl 5.005_03 > DBI 1.14 > DBD::Oracle 1.06 > > > Our test package is defined as follows (note, this code is based on an > example provided by Geoffrey Young <[EMAIL PROTECTED]> from dbi-users). > > > > --------------------------- BEGIN SQL code ----------------------- > CREATE OR REPLACE PACKAGE curref_test > IS > TYPE cursor_reference IS REF CURSOR; > > PROCEDURE emp_cursor (label_in IN VARCHAR2, > curref IN OUT cursor_reference); > > PROCEDURE emp_cursor_close (curref IN cursor_reference); > END; > / > > > CREATE OR REPLACE PACKAGE BODY curref_test > IS > > PROCEDURE emp_cursor (label_in IN VARCHAR2, > curref IN OUT cursor_reference) > IS > BEGIN > OPEN curref FOR > SELECT label_in FROM DUAL; > END; > > PROCEDURE emp_cursor_close (curref IN cursor_reference) > IS > BEGIN > close curref; > END; > > END; > / > --------------------------- END SQL code ----------------------- > > > We have the following perl script to test this ... > > ############################ BEGIN PERL CODE ################### > > #!/usr/bin/perl > > use DBI; > use DBD::Oracle qw(:ora_types); > > BEGIN { > ## ENTER YOUR OWN VALUES HERE ... > $ENV{'ORACLE_HOME'}="/home/oracle/product/8.0.5"; > $identifier = "dbname"; > $user= "user"; > $pass = "pass"; > } > > $label_in = "TEST STRING"; > > $dbh = DBI->connect("dbi:Oracle:$identifier", $user, $pass, > {RaiseError => 1, AutoCommit => 1, PrintError => 1}) || die >$DBI::errstr; > > print "Trying to open the ref cursor...\n"; > > $query = qq( > BEGIN > curref_test.emp_cursor(:label_in, :curref); > END; > ); > > $sth = $dbh->prepare($query); > > $sth->bind_param(":label_in", $label_in); > $sth->bind_param_inout(":curref", \$curref, 0, {ora_type => ORA_RSET}); > > $sth->execute; > $sth->finish; > > print "These are the results from the ref cursor:\n"; > > while (@result = $curref->fetchrow_array) { > print join "\t", @result, "\n"; > } > > print "Trying to close the ref cursor...\n"; > > $query = qq( > BEGIN > curref_test.emp_cursor_close(:curref); > END; > ); > > print "\tpreparing...\n"; > $sth = $dbh->prepare($query); > > print "\tbinding...\n"; > $sth->bind_param(":curref", $curref, {ora_type => ORA_RSET}); > > print "\texecuting...\n"; > $sth->execute; > > print "\tfinishing...\n"; > $sth->finish; > > print "The cursor is now closed\n"; > > $dbh->disconnect; > > ############################ END PERL CODE ################### > > When the above is run, we get the following output: > > > Trying to open the ref cursor... > These are the results from the ref cursor: > TEST STRING > Trying to close the ref cursor... > preparing... > binding... > executing... > finishing... > The cursor is now closed > Segmentation fault (core dumped) > > > > > setting DBI_TRACE to 2 produces the following just prior to the > coredump: > > -> disconnect_all for DBD::Oracle::dr (DBI::dr=HASH(0x8152ccc)~0x80e6f48) > <- disconnect_all= '' at DBI.pm line 450. > -> DESTROY for DBD::Oracle::st (DBI::st=HASH(0x819f92c)~INNER) > <- DESTROY= undef during global destruction. > -> DESTROY for DBD::Oracle::st (DBI::st=HASH(0x8158020)~INNER) > Segmentation fault (core dumped) > > > > strace produces the following output just prior to the coredump: > > rt_sigaction(SIGINT, {SIG_DFL}, {0x402d8b60, ~[ILL ABRT BUS FPE KILL SEGV STOP XCPU >XFSZ UNUSED], SA_RESTART|0x4000000}, 8) = 0 > rt_sigprocmask(SIG_SETMASK, [], NULL, 8) = 0 > rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 > rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 > rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 > rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 > rt_sigprocmask(SIG_BLOCK, NULL, [], 8) = 0 > --- SIGSEGV (Segmentation fault) --- > +++ killed by SIGSEGV +++ > > > Removing the $dbh->disconnect line from the perl code causes the perl > to hang rather than coredump after the rt_sigprocmask calls/implicit > database handle close, but this still isn't very satisfactory. > > Any suggestions or pointers gratefully received ... please reply by email, > to [EMAIL PROTECTED] as well as to the list ... > > cheers, > Martin > > > > > > > > > -- Thomas A. Lowery [EMAIL PROTECTED] http://tlowery.hypermart.net _________________________________________________________ Do You Yahoo!? Get your free @yahoo.com address at http://mail.yahoo.com