Oracle OCCI setDataBuffer 导致 ORA-01406:获取的列值被截断

Oracle OCCI setDataBuffer causing ORA-01406: fetched column value was truncated

我正在使用 setDataBuffer 通过游标检索从存储过程返回的行,因为 setPrefetchRowCount 在这种情况下似乎不起作用。 当缓冲区大于返回行的总数时,使用 setDataBuffer 效果很好。在我的例子中,我测试了缓冲区可以容纳 5000 行,返回的行数是 538。当我将缓冲区的长度减少到 100(下面的 max_numrows=100)时,它会在前三个调用 next(max_numrows) 并给出与缓冲区较大时完全相同的结果。但是,在第四次调用时,我得到异常 ORA-01406:获取的列值被截断。 这是怎么回事,我该如何解决这个问题?

static const size_t max_numrows=5000;
char var_buf[max_numrows][7];
char sym_buf[max_numrows][9];
rs->setDataBuffer(1,var_buf,oracle::occi::OCCI_SQLT_STR,sizeof(var_buf[0]),(ub2*)0);
rs->setDataBuffer(2,sym_buf,oracle::occi::OCCI_SQLT_STR,sizeof(sym_buf[0]),(ub2*)0);
sym.resize(var.size());
size_t fetch_count=0;
while(rs->next(max_numrows)==ResultSet::DATA_AVAILABLE)
{
    for(size_t i=0;i<rs->getNumArrayRows();++i)
    {
        var[fetch_count*max_numrows+i]=var_buf[i];
        sym[fetch_count*max_numrows+i]=sym_buf[i];
    }
    ++fetch_count;
}

数据库

这与行无关,而是与列宽有关。从数据库中获取的某些值超过 7 个。 9 个字节。