1

我必须为一个简单的查询编写 OCI 代码,例如Select * from emp;

由于我不知道将返回多少行,我无法预先分配缓冲区所以我void **在关联输出缓冲区时定义了一个指针。

这个想法是调用OCIStmtExecutewith iters = 0since

对于 SELECT 语句,如果 iters 不为零,则必须为语句句柄完成定义。执行将 iters 行提取到这些预定义的缓冲区中,并根据预取行数预取更多行。如果您不知道 SELECT 语句将检索多少行,请将 iters 设置为零。

如果非 SELECT 语句的 iters=0,此函数将返回错误。

之后,我计划OCIAttrGet(OCI_ATTR_ROW_COUNT)将数字获取到 select 语句返回的行,然后为输出缓冲区分配内存,然后通过指定因此返回的行数来调用 OCIStmtFetch。

但是即使表返回了数据,我每次得到的行数都是 0。

我的方法有什么缺陷吗?你能指出缺陷吗

4

1 回答 1

0

您只需为一行分配空间,然后OCIStmtFetch2()重复调用,直到到达结果集的末尾(这将给出错误代码 1403)。预取发生在 OCI 自身维护的缓冲区中,对您来说是透明的,因此这种方法并不是低效的。

于 2013-06-20T15:28:52.783 回答