Мы читаем данные из CLOB в std::vector
через 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 );
Это приводит к ошибке ORA-32116, говорящей о том, что размер буфера (3-й аргумент чтения) должен быть равен или больше объема считываемых данных (1-й аргумент чтения). Это условие, по-видимому, выполняется.
После увеличения размера буфера до 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».
Приветствуются любые разъяснения по теме.