On Fri, 2010-05-21 at 09:23 +0100, Martin Evans wrote:
> John Scoles wrote:
> > Ok I have patched up a solution I think will work across the board and you
> > can find it here
> >
> > http://svn.perl.org/modules/dbd-oracle/branches/oci_batch
> >
> > here are the details
> >
> > ora_oci_batch
> >
> > For 11g users you may encounter an error while using the execute_array in
> > that it does not
> > return a full list of tuples. This seems to be a result in that a statement
> > can only
> > have 'LOG ERRORS' or 'SAVE EXCEPTIONS'set, By setting this flag to a value
> > should stop this
> > problem error.
> >
> > For convenience I have added support for a 'ORA_DBD_OCI_BATCH'
> > environment variable that you can use at the OS level to set this
> > value. It can also be set as an attribute on both the Connect and Prepare.
> >
> > Unfortunately I can't test it (do not have an 11g box yet) so It will stay
> > in the above branch until it is tested hopefully by you Scott
> >
> > Cheers
> > John Scoles
> >
> > --
> > See Pythian's Alex Gorbachev, co-author of "Expert Oracle Practices" at
> > NoCOUG Spring Conference May 20th.
> > Details, interview & book chapter in the May NoCOUG Journal:
> > http://bit.ly/alexnocoug
> >
>
> I'm not sure why I seem to have ignored your mail but I just noticed it
> again - sorry for the delay.
>
> I checked out the branch you mentioned and
>
> export ORA_DBD_OCI_BATCH=1
>
> but 26exe_array still seems to fail for me:
Sorry John, I meant to test earlier but its been a busy week.
Fails for me as well.
DB<7> x $dbh->{'ora_oci_batch'}
0 1
DB<8> n
main::(../tst_exec_ary.pl:13): my $sth = $dbh->prepare("Insert into TestArray
Values(?, ?, ?) LOG ERRORS INTO ERR_TESTARRAY");
DB<8> n
main::(../tst_exec_ary.pl:15): $sth->bind_param_array(1, [ qw(One Uno Il oNe)
]);
DB<8> n
main::(../tst_exec_ary.pl:16): $sth->bind_param_array(2, [ 2, 22, 0, 222 ]);
DB<8> n
main::(../tst_exec_ary.pl:17): $sth->bind_param_array(3, [ qw(20070101
20080101 20090101 20060101) ]);
DB<8> n
main::(../tst_exec_ary.pl:21): $sth->execute_array({});
DB<8> n
DBD::Oracle::st execute_array failed: ORA-38909: DML Error logging is not
supported with BATCH ERROR mode (DBD ERROR: OCIStmtExecute) [for Statement
"Insert into TestArray Values(?, ?, ?) LOG ERRORS INTO ERR_TESTARRAY"] at
../tst_exec_ary.pl line 21.
at ../tst_exec_ary.pl line 21
>
> mar...@bragi:~/svn/dbd-oracle/branches/oci_batch$ prove -vb t/26exe_array.t
> t/26exe_array.t ..
> 1..17
> ok 1 - use DBI;
> ok 2 - The object isa DBI::db
> ok 3 - ... execute_array should return true
> ok 4 - ... we should have 10 tuple_status
> ok 5 - ... execute_array should return false
> ok 6 - ... we should have 10 tuple_status
> ok 7 - ... we should get text
> ok 8 - ... we should get -1
> ok 9 - ... we should get a warning
> ok 10 - ... execute_for_fetch should return true
> not ok 11 - ... we should have 19 tuple_status
>
> # Failed test '... we should have 19 tuple_status'
> # at t/26exe_array.t line 128.
> # got: 10
> # expected: 19
> ok 12 - ... execute_array should return flase
> ok 13 - ... we should have 10 tuple_status
> not ok 14 - ... we should have 48 rows
>
> # Failed test '... we should have 48 rows'
> # at t/26exe_array.t line 154.
> # got: 30
> # expected: 48
> ok 15 - ... execute_array should return true
> ok 16 - ... \#5 should be a warning
> ok 17 - ... we should have 10 tuple_status
> # Looks like you failed 2 tests of 17.
> Dubious, test returned 2 (wstat 512, 0x200)
> Failed 2/17 subtests
>
> Test Summary Report
> -------------------
> t/26exe_array.t (Wstat: 512 Tests: 17 Failed: 2)
> Failed tests: 11, 14
> Non-zero exit status: 2
> Files=1, Tests=17, 0 wallclock secs ( 0.02 usr 0.01 sys + 0.05 cusr
> 0.01 csys = 0.09 CPU)
> Result: FAIL
>
> This was using oracle 11.1 server and 11.1 instant client.
>
> If I've not set the right thing let me know.
>
> Martin