我正在调用一个过程(从 C# 通过 ODP.Net 和 Oracle.DataAccess.dll 4.112.3.0 到带有一些补丁的 OracleDB 11.2.0.1),它有一个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
,它可以正常工作(除了不锁定我需要的记录)。
这可能是版本冲突吗?
如何解决?
更新:我怀疑这可能是因为我试图在表加载时一次锁定多个记录。我现在正在对此进行一些额外的测试......不。不是这个。在第一次调用时执行 a yield return
on awhile (oracleDataReader.Read())
会引发同样的事情。.Read()