std::vector
我们正在通过 OCCI将数据从 CLOB 读入。简化的代码如下所示:
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 );
这会产生错误 ORA-32116,表示缓冲区大小(读取的第三个参数)应该等于或大于要读取的数据量(读取的第一个参数)。这个条件显然成立。
将缓冲区大小增加到 4*len 后:
unsigned have_read = clob.read(len , result.data() , 4 * len);
操作正确执行。到目前为止, 和 的值have_read
始终len
相同。
缓冲区是否需要未记录的额外空间?还是需要完整的页面?
我们使用的是“Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit”。
欢迎对该主题进行任何澄清。