Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

error OPENing an OUT SYS_REFCURSOR with FOR UPDATE SKIP LOCKED

I'm calling a procedure (from C# via ODP.Net with Oracle.DataAccess.dll 4.112.3.0 to OracleDB 11.2.0.1 with some patches) that has an OUT SYS_REFCURSOR (let's call it pCursorOut). In the procedure, I do this:

OPEN pCursorOut FOR SELECT ... FOR UPDATE SKIP LOCKED;

My C# code:

var oracleDataReader = oracleCommand.ExecuteDataReader();
dataTable.Load(oracleDataReader); 

Calling Load() results in an OracleException:

ORA-03113: end-of-file on communication channel

If I remove the FOR UPDATE SKIP LOCKED, it works correctly (other than not locking the records, which I need).

Could this be a version conflict?

How can this be solved?

UPDATE: I suspect this may be because I'm trying to lock more than one record at a time with the table load. I'm doing some additional testing on this now... NOPE. That's not it. Doing a yield return on a while (oracleDataReader.Read()) throws the same thing on the first .Read() call.

like image 590
Thought Avatar asked Nov 24 '25 02:11

Thought


1 Answers

Turns out it was a versioning conflict. I upgraded to OracleDB 11.2.0.3, and it started working as expected.

like image 88
Thought Avatar answered Nov 26 '25 14:11

Thought



Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!