Oh yeah a few more quick questions 1) Which version of 11g are you running? 2) Has it been Patched? 3) can you to a make test and send me the results
Just need the above to have the proper talks with my Oracle chum cheers John Scoles > Hi, > > We have found some of our code that worked perfectly well with 9i > started failing when we moved the database to 11g. We are using > DBD::Oracle 1.22. > > I have managed to create a very simple test case ... > > #!/usr/bin/perl -w > > use strict; > use warnings; > use DBI qw(); > > my $uidpwd = 'usr/p...@db'; > my $dbh = DBI->connect('dbi:Oracle:', $uidpwd, '', {RaiseError => 1, > PrintError => 0}); > > $dbh->trace(3); > my $sth = $dbh->prepare(q( > select :dummy > from dual > union all > select :dummy > from dual > )); > $sth->bind_param(':dummy', 100); > $sth->execute; > my $data = $sth->fetchall_arrayref; > > END { > if (defined $dbh) { > $dbh->disconnect; > } > } > > If I run this connecting to a 9i instance, everything is fine. However > if I run it connecting to an 11g instance, it crashes with an ORA-24345. > > Here is the output of a level 3 trace for the *9i* run ... > > DBI::db=HASH(0x82df56c) trace level set to 0x0/3 (DBI @ 0x0/0) in > DBI 1.605-ithread (pid 29269) > -> prepare for DBD::Oracle::db (DBI::db=HASH(0x82df5d8)~0x82df56c ' > select :dummy > from dual > union all > select :dummy > from dual > ') thr#8153008 > dbd_preparse scanned 1 distinct placeholders > dbd_st_prepare'd sql SELECT (pl1, auto_lob1, check_sql1) > dbd_describe SELECT (EXPLICIT, lb 80)... > Described col 1: dbtype 1(VARCHAR), scale 0, prec 2000, nullok 1, > name :DUMMY > : dbsize 2000, char_used 0, char_size 2000, csid 873, csform > 1, disize 2000 > fbh 1: ':DUMMY' NULLable, otype 1-> 5, dbsize 2000/2001, p2000.s0 > row cache OCI_ATTR_PREFETCH_ROWS 14, OCI_ATTR_PREFETCH_MEMORY 0 > rs_array_init: rs_array_on=0, rs_array_size=1 > calling OCIAttrSet OCI_ATTR_CHARSET_FORM with csform=1 > dbd_describe'd 1 columns (row bytes: 2000 max, 1000 est avg, cache: > 14) > <- prepare= DBI::st=HASH(0x82e905c) at 11g.plx line 14 > -> bind_param for DBD::Oracle::st (DBI::st=HASH(0x82e905c)~0x82e9038 > ':dummy' 100) thr#8153008 > dbd_bind_ph(): bind :dummy <== 100 (type 0 (DEFAULT (varchar))) > dbd_rebind_ph_char() (1): bind :dummy <== 100 (size 3/4/0, ptype > 5(VARCHAR), otype 1 ) > dbd_rebind_ph_char() (2): bind :dummy <== '100' (size 3/4, otype > 1(VARCHAR), indp 0, at_exec 1) > bind :dummy as ftype 1 (VARCHAR) > dbd_rebind_ph(): bind :dummy <== 100 (in, not-utf8, csid 1->0->1, ftype > 1 (VARCHAR), csform 0->0, maxlen 4, maxdata_size 0) > <- bind_param= 1 at 11g.plx line 21 > -> execute for DBD::Oracle::st (DBI::st=HASH(0x82e905c)~0x82e9038) > thr#8153008 > dbd_st_execute SELECT (out0, lob0)... > Statement Execute Mode is 0 (DEFAULT) > in ':dummy' [0,0]: len 3, ind 0, value=100 > dbd_st_execute SELECT returned (SUCCESS, rpc0, fn4, out0) > <- execute= '0E0' at 11g.plx line 22 > -> fetchall_arrayref for DBD::Oracle::st > (DBI::st=HASH(0x82e905c)~0x82e9038) thr#8153008 > dbd_st_fetch 1 fields... > dbd_st_fetched 1 fields with status of 0(SUCCESS) > dbd_st_fetch 1 fields... > dbd_st_fetched 1 fields with status of 0(SUCCESS) > dbd_st_fetch 1 fields... > dbd_st_fetch no-more-data > -> DESTROY for DBD::Oracle::st (DBI::st=HASH(0x82e9038)~INNER) > thr#8153008 > <- DESTROY= undef > -> trace for DBD::Oracle::db (DBI::db=HASH(0x82df5d8)~0x82df56c 0) > thr#8153008 > <- trace= 3 at 11g.plx line 27 via at 11g.plx line 0 > > Here is the *11g* level 3 trace output ... > > DBI::db=HASH(0x82df524) trace level set to 0x0/3 (DBI @ 0x0/0) in > DBI 1.605-ithread (pid 29253) > -> prepare for DBD::Oracle::db (DBI::db=HASH(0x82df590)~0x82df524 ' > select :dummy > from dual > union all > select :dummy > from dual > ') thr#8153008 > dbd_preparse scanned 1 distinct placeholders > dbd_st_prepare'd sql SELECT (pl1, auto_lob1, check_sql1) > dbd_describe SELECT (EXPLICIT, lb 80)... > Described col 1: dbtype 1(VARCHAR), scale 0, prec 0, nullok 1, > name :DUMMY > : dbsize 0, char_used 0, char_size 0, csid 873, csform 1, > disize 0 > fbh 1: ':DUMMY' NULLable, otype 1-> 5, dbsize 0/1, p0.s0 > row cache OCI_ATTR_PREFETCH_ROWS 1123, OCI_ATTR_PREFETCH_MEMORY 0 > rs_array_init: rs_array_on=0, rs_array_size=1 > calling OCIAttrSet OCI_ATTR_CHARSET_FORM with csform=1 > dbd_describe'd 1 columns (row bytes: 0 max, 0 est avg, cache: 1123) > <- prepare= DBI::st=HASH(0x82e9014) at 11g.plx line 14 > -> bind_param for DBD::Oracle::st (DBI::st=HASH(0x82e9014)~0x82e8ff0 > ':dummy' 100) thr#8153008 > dbd_bind_ph(): bind :dummy <== 100 (type 0 (DEFAULT (varchar))) > dbd_rebind_ph_char() (1): bind :dummy <== 100 (size 3/4/0, ptype > 5(VARCHAR), otype 1 ) > dbd_rebind_ph_char() (2): bind :dummy <== '100' (size 3/4, otype > 1(VARCHAR), indp 0, at_exec 1) > bind :dummy as ftype 1 (VARCHAR) > dbd_rebind_ph(): bind :dummy <== 100 (in, not-utf8, csid 1->0->1, ftype > 1 (VARCHAR), csform 0->0, maxlen 4, maxdata_size 0) > <- bind_param= 1 at 11g.plx line 21 > -> execute for DBD::Oracle::st (DBI::st=HASH(0x82e9014)~0x82e8ff0) > thr#8153008 > dbd_st_execute SELECT (out0, lob0)... > Statement Execute Mode is 0 (DEFAULT) > in ':dummy' [0,0]: len 3, ind 0, value=100 > dbd_st_execute SELECT returned (SUCCESS, rpc0, fn4, out0) > <- execute= '0E0' at 11g.plx line 22 > -> fetchall_arrayref for DBD::Oracle::st > (DBI::st=HASH(0x82e9014)~0x82e8ff0) thr#8153008 > dbd_st_fetch 1 fields... > dbd_st_fetched 1 fields with status of 1(SUCCESS_WITH_INFO) > !! ERROR: '24345' 'ORA-24345: A Truncation or null fetch error > occurred (DBD ERROR: ORA-01406 error on field 1 of 1, ora_type > 1)' (err#1) > <- fetchall_arrayref= [ ] row1 at 11g.plx line 23 > ERROR: '24345' 'ORA-24345: A Truncation or null fetch error > occurred (DBD ERROR: ORA-01406 error on field 1 of 1, ora_type > 1)' (err#1) > 1 <- FETCH= HASH(0x82e91c4)1keys at 11g.plx line 23 > DBD::Oracle::st fetchall_arrayref failed: ORA-24345: A Truncation or > null fetch error occurred (DBD ERROR: ORA-01406 error on field 1 of 1, > ora_type 1) [for Statement " > select :dummy > from dual > union all > select :dummy > from dual > " with ParamValues: :dummy=100] at ./11g.plx line 23. > -> DESTROY for DBD::Oracle::st (DBI::st=HASH(0x82e8ff0)~INNER) > thr#8153008 > ERROR: '24345' 'ORA-24345: A Truncation or null fetch error > occurred (DBD ERROR: ORA-01406 error on field 1 of 1, ora_type > 1)' (err#1) > <- DESTROY= undef > -> trace for DBD::Oracle::db (DBI::db=HASH(0x82df590)~0x82df524 0) > thr#8153008 > ERROR: '24345' 'ORA-24345: A Truncation or null fetch error > occurred (DBD ERROR: ORA-01406 error on field 1 of 1, ora_type > 1)' (err#0) > <- trace= 3 at 11g.plx line 27 via at 11g.plx line 0 > > I found that if I changed the SELECT expression to either > 'TO_NUMBER(:dummy)' or '0 + :dummy' it works on 11g (as well as 9i). > > I don't know if this is to do with DBD::Oracle code or if it is a change > in behaviour from 9i OCI to 11g OCI, but would appreciate some feedback > from the DBD::Oracle maintainer. > > Thanks, > > Steve > > > This email is intended solely for the use of the addressee and may > contain information that is confidential, proprietary, or both. > If you receive this email in error please immediately notify the > sender and delete the email. > >