OCI调用select语句

时间:2013-06-13 00:28:58

标签: c oracle oci

我必须为Select * from emp;

之类的简单查询编写OCI代码

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

我们的想法是将OCIStmtExecuteiters = 0称为

  

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

     

对于非SELECT语句,如果iters = 0,则此函数返回错误。

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

但是,即使表中返回了数据,我每次获得的行数也是0。

我的方法有一些缺陷吗?你能否指出这个缺陷

1 个答案:

答案 0 :(得分:0)

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