In the process of moving from centos 4 to a centos 5 machine one
script stopped working. I distilled it down to this problem :


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

my $dbh = DBI->connect("dbi:Oracle:host=SSSS;sid=SSSS", 'XXXX',
'XXXX',
                       {RaiseError => 1,
                        AutoCommit => 0,
                        LongReadLen => 5000
                        }
                       ) || die "Database connection not made:
$DBI::errstr";

my $q = qq/
  SELECT
        (2+3),
        cursor(select 2+3 from dual),
        cursor(select 3+3 from dual)
        FROM table where rownum < 10
/;

my $sth = $dbh->prepare($q);
$sth->execute();
while ( my @d = $sth->fetchrow_array ) {
          print join(" " , @d) . "\t";
          while ( my @g = $d[1]->fetchrow_array ) {
                  print join(" " ,@g) . "\t";
          }
           while ( my @g = $d[2]->fetchrow_array ) {
                  print join(" " ,@g ). "\t";
          }
          print "\n";
}

no problem in sqlplus for this query in either machine.

On the server with DBI 1.58 , DBD::Oracle 1.19 and oracle instant
client 10.1 it works fine.

On the server with DBI 1.611 , DBD::Oracle 1.24b and oracle instant
client 11.1 it returns nothing, with no errors.

Use  of DBI_TRACE returns nothing I can work with, it just stops on
the newer server:

    -> prepare for DBD::Oracle::db
(DBI::db=HASH(0x1be48c80)~0x1be48c40 '
  SELECT
        (2+3),
        cursor(select 2+3 from dual),
        cursor(select 3+3 from dual)
        FROM table where rownum < 10
') thr#1bb1a010
        dbd_st_prepare'd sql SELECT (pl1, auto_lob1, check_sql1)
        dbd_describe SELECT (EXPLICIT, lb 5000)...
Described col  1: dbtype 2(NVARCHAR2), scale 0, prec 0, nullok 1, name
(2+3)
                  : dbsize 2, char_used 0, char_size 0, csid 0, csform
0(0), disize 171
        fbh 1: '(2+3)'  NULLable, otype   2->  5, dbsize 2/172, p0.s0
Described col  2: dbtype 116(SQLT_RSET  OCI 8 cursor variable), scale
0, prec 0, nullok 1, name CURSOR(SELECT2+3FROMDUAL)
                  : dbsize 8, char_used 0, char_size 0, csid 0, csform
0(0), disize 8
        fbh 2: 'CURSOR(SELECT2+3FROMDUAL)'      NULLable, otype 116-
>116, dbsize 8/8, p0.s0
Described col  3: dbtype 116(SQLT_RSET  OCI 8 cursor variable), scale
0, prec 0, nullok 1, name CURSOR(SELECT3+3FROMDUAL)
                  : dbsize 8, char_used 0, char_size 0, csid 0, csform
0(0), disize 8
        fbh 3: 'CURSOR(SELECT3+3FROMDUAL)'      NULLable, otype 116-
>116, dbsize 8/8, p0.s0
        cache settings DB Handle RowCacheSize=0,Statement Handle
RowCacheSize=0, OCI_ATTR_PREFETCH_ROWS=339,
OCI_ATTR_PREFETCH_MEMORY=0, Rows per Fetch=339, Multiple Row Fetch=On
        dbd_describe'd 3 columns (row bytes: 18 max, 20 est avg,
cache: 0)
    <- prepare= DBI::st=HASH(0x1be48ee0) at trek_cursor_query.pl line
33
    -> execute for DBD::Oracle::st
(DBI::st=HASH(0x1be48ee0)~0x1be48e20) thr#1bb1a010
   dbd_st_execute SELECT (out0, lob0)...
Statement Execute Mode is 0 (DEFAULT)
        rs_array_init:imp_sth->rs_array_size=2, rs_array_idx=0,
prefetch_rows=0, rs_array_status=SUCCESS
        dbd_st_execute SELECT returned (SUCCESS, rpc0, fn4, out0)
    <- execute= '0E0' at trek_cursor_query.pl line 34
    -> fetchrow_array for DBD::Oracle::st
(DBI::st=HASH(0x1be48ee0)~0x1be48e20) thr#1bb1a010
        dbd_st_fetch 3 fields...



Removing one of the cursor statements makes it work on both machines!
I am out of ideas.

Any ideas are most appreciated!

Thanks,
LK







Reply via email to