小编Pet*_*ing的帖子

在Oracle OCCI/OCI中,读取LOB的缓冲区是否应该大于实际数据?获取 ORA-32116

我们正在将数据从 CLOB 读取到std::vectorvia OCCI 中。简化的代码如下所示:

oracle::occi::Clob clob = result.getClob( 3 );
unsigned len = clob.length();
std::vector< unsigned char > result( len );
unsigned have_read = clob.read( len , result.data() , len );
Run Code Online (Sandbox Code Playgroud)

这会产生错误 ORA-32116,表示缓冲区大小(读​​取的第三个参数)应等于或大于要读取的数据量(读取的第一个参数)。这个条件显然是成立的。

将缓冲区大小增加到 4*len 后:

unsigned have_read = clob.read(len , result.data() , 4 * len);
Run Code Online (Sandbox Code Playgroud)

操作执行正确。have_read到目前为止,和的值len始终相同。

缓冲区是否需要未记录的额外空间?还是需要完整的页面?

我们使用“Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64位”。

欢迎对该主题进行任何澄清。

c++ oracle clob occi oracle12c

5
推荐指数
1
解决办法
1023
查看次数

标签 统计

c++ ×1

clob ×1

occi ×1

oracle ×1

oracle12c ×1