1

我有两个数据库(10g 和 11g)。我通过 C# 连接到数据库,如下所示:

var con = new OracleConnection("data source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = MYHOST)(PORT = MYPORT)) ) (CONNECT_DATA = (SERVER=DEDICATED) (SID = MYSID)));user id=MYUSER;password=MYPW");
var cmd = new OracleCommand("select id,clob_field from some_table", con);
cmd.InitialLOBFetchSize = -1;
using ( var reader = cmd.ExecuteReader() )
{
    while ( reader.Read() )
    {
        var id = reader.GetInt32(0);
        var clob = reader.GetString(1);
    }
    reader.Close();
}

该表有大约 15000 行,其中平均 CLOB 大小为 10KB。上面的代码每 100 行需要 1 分钟。两个数据库都有同样的问题。

如果我评论“var clob = ...”这一行,那么我会得到非常好的表现。

我试图dbms_lob.substr(clob_field,4000,1) where length(clob_field)<=4000在几秒钟内拆分查询并获得 1-3k 行。但另一部分(剩余 3-4k 行)大约需要 10 分钟。

在 SQLDeveloper 中执行查询会在几秒钟内返回所有数据(每 1000 行不到 1 秒)。

任何人都可以帮助我获得合理的表现吗?

4

0 回答 0