我正在调用一个程序(从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}}来电时抛出同样的内容。
答案 0 :(得分:1)
原来这是版本冲突。我升级到Oracle DB 11.2.0.3,它开始按预期工作。