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

Reply via email to