Ok I guess it is back to square 1 on this.
Unfortunetly no time to look at it today
Will write up a small test script and see if my patch actually does anything
You may hear from me in a few days
Cheers
John
Scott T. Hildreth wrote:
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