I just tried the error handling array binding sample code in the doc with ODP.NET Core 2.19.7 and 2.19.31. Both providers return the correct row(s) that have an error.
Can you publish a code sample with your test case that demonstrates the incorrect error info? It's possible your usage scenario has a bug.
You can also try out the doc code sample. I tested against a 19c DB and using .NET Core 3.1.
Thank you for your answer! I found, that sample code in the doc works fine, if command text is simple DML.
But if I wrap it to PL/SQL, exception details with ORA-24381 and ArrayBindIndex are lost:
cmd.CommandText = "begin insert into depttest(deptno) values (:deptno); end;";
Since you're using anonymous PL/SQL, the error handling needs to occur within the PL/SQL block. Anonymous PL/SQL has its own exception handling section.
Now it is clear! But it seems to be very inconvenient from developer's position in C#, because the behavior of OracleCommand now depends on command text - whether it is a simple DML or PL/SQL block. Does it really make so much difference inside ODP.Net, that exception handling is implemented differently? If so, it would be nice to write about that in the article: https://docs.oracle.com/cd/E85694_01/ODPNT/featOraCommand.htm#GUID-AB68A40C-FF5A-471D-AF4C-61D1096E9B3A