我们有一个使用 OCI 的应用程序,但我们似乎无法使预取工作。
我们对一个包含十几个列的表进行选择查询(其中一个 CLOB 列和一个MDSYS.GEOMETRY
列)。CLOB 列在 99% 的情况下小于 4000 字节,甚至在 50% 的情况下为空。
流程如下:
- 我们设置
OCI_ATTR_PREFETCH_ROWS
为 500 - 我们将列绑定到输出缓冲区,CLOB 直接绑定到 8000 字节的文本缓冲区
- 对于 CLOB 句柄,我们设置
OCI_ATTR_LOBPREFETCH_SIZE
为 8000 - 我们
OCISTMTEXECUTE
与 iters 1 一起使用,因为一行被提取到缓冲区中。
现在,如果我们查看 WireShark,我们会看到网络数据包永远不会被填充(每次往返只有一条记录)。
如果我们使用 SQLDeveloper 执行相同的选择查询,那么数据包会很好地填充,因此我们可以假设行预取应该可以工作。
我们在这里缺少什么?