C# 查询非空CLOB字段返回间歇性空CLOB

C# 查询非空CLOB字段返回间歇性空CLOB,c#,.net,oracle11g,odp.net,clob,C#,.net,Oracle11g,Odp.net,Clob,我正在查询一个表,该表包含一个非空的CLOB字段。偶尔查询返回一个CLOB返回为null的结果集,这是一个明显的约束冲突。我可以通过重读来解决这个问题,但这是一个黑客行为 它似乎不是我们正在使用的驱动程序或ORM,因为第三方应用程序使用的基于Java的驱动程序和非托管Oracle客户端似乎也存在同样的问题。我没有做任何类型的并行I/O。查询在单个事务中执行,表AFAIK上没有争用 这是设置 DB:Oracle数据库11g企业版11.2.0.4.0版-64位生产 驱动程序:Oracle.Mana

我正在查询一个表,该表包含一个非空的CLOB字段。偶尔查询返回一个CLOB返回为null的结果集,这是一个明显的约束冲突。我可以通过重读来解决这个问题,但这是一个黑客行为

它似乎不是我们正在使用的驱动程序或ORM,因为第三方应用程序使用的基于Java的驱动程序和非托管Oracle客户端似乎也存在同样的问题。我没有做任何类型的并行I/O。查询在单个事务中执行,表AFAIK上没有争用

这是设置

  • DB:Oracle数据库11g企业版11.2.0.4.0版-64位生产
  • 驱动程序:Oracle.ManagedDataAccess 12.2.1100 via NuGet(又名ODP.NET)
  • .NET:4.6
  • ORM:NPoco 3.9.3
什么会导致这种情况,有解决办法吗?这可能是一个驱动程序错误吗?问题似乎是在负载下发生的,但并非总是如此


与我的同事一起,我们有几种理论,最突出的是,在低级别,当我们开始访问结果集时,驱动程序正在异步加载CLOB。这似乎是牵强的,显然是错误的。另一种理论是,有时?从CLOB到字符串的转换失败。

您没有提供任何代码详细信息,因此几乎无法回答,但我要说的是,Oracle CLOB有一个空状态,它与null不同,但可能被您端编写不正确的代码转换为null。另外,您使用的是非常旧的ODP.NET版本,应该试用最新的12.2驱动程序。您将尝试更新驱动程序。我没有发布代码,因为代码似乎并不重要(两个非常不同的设置具有相同的行为)。我敢打赌,经过我们的努力,这是一个驱动程序错误。驱动程序是最新的。相同的行为。内部LOB是否正确初始化,例如使用
EMPTY\u CLOB()
的INSERT/UPDATE语句?否使用实际内容初始化字段。