On 20/01/11 09:55, Tim Bunce wrote: > I wonder if we could run an older DBD::Oracle against an Oracle 9 (say) > database to recreate the (presumably) original behaviour.
I kept my Oracle 11.1.0.6.0 database and tried various combinations of DBD::Oracle (back to 1.19) and instant clients - non work as documented. I then tried instant client 10.2.0.5.0 to an oracle database 10.2.0.5.0 (with DBD::Oracle 1.19) and it works: DB Version: 10.2.0.1.0 ********** do_it ********** AutoCommit = 1 execute_array = undef total affected rows = undef Error from execute_array - errstr=ORA-24381: error(s) in array DML (DBD SUCCESS_WITH_INFO: OCIStmtExecute), err=0, state='' $tuple_status = [ -1, [ 1, 'ORA-00001: unique constraint (SYSTEM.SYS_C005544) violated (DBD SUCCESS_WITH_INFO)' ], -1, -1 ]; Error captured in handler: undef Warning captured in SIGWARN handler: undef $select * from mytest = [ [ '1', 'onetwothree ' ], [ '51', 'fiftyone ' ], [ '52', 'fiftythree ' ], [ '53', 'one ' ] ]; Notice, the successful rows are committed and the unsuccessful row is not. After trying various other combinations it seems any version of instant client or DBD::Oracle works so long as Oracle database is less than 11. I cannot say as yet if it is a bug in Oracle or some change DBD::Oracle didn't follow. So it would appear DBD::Oracle/Oracle has always issued a warning and not an error when a tuple fails. I think this is really dangerous if someone is relying on RaiseError so I've changed the DBD::Oracle we use internally to raise an error. Martin -- Martin J. Evans Easysoft Limited http://www.easysoft.com