错误在FOR UPDATE SKIP LOCKED打开OUT SYS_REFCURSOR时出错

时间:2012-07-17 21:01:02

标签: oracle oracle11g odp.net sys-refcursor ora-03113

我正在调用一个程序(从C#通过ODP.Net,带有Oracle.DataAccess.dll 4.112.3.0到带有一些补丁的OracleDB 11.2.0),这个程序有一个OUT SYS_REFCURSOR(让我们这样做)称之为pCursorOut)。在程序中,我这样做:

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

我的C#代码:

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

致电Load()会产生OracleException

  

ORA-03113:通信频道上的文件结尾

如果我删除了FOR UPDATE SKIP LOCKED,它就能正常工作(除了锁定我需要的记录)。

这可能是版本冲突吗?

如何解决这个问题?

更新:我怀疑这可能是因为我尝试使用表格加载一次锁定多条记录。我现在正在做一些额外的测试... NOPE。那不是。在yield return上对while (oracleDataReader.Read())执行.Read()会在第一次{{1}}来电时抛出同样的内容。

1 个答案:

答案 0 :(得分:1)

原来这是版本冲突。我升级到Oracle DB 11.2.0.3,它开始按预期工作。