【问题标题】:OCI call for select statementOCI 调用 select 语句
【发布时间】:2013-06-13 00:28:57
【问题描述】:

我必须为 Select * from emp; 这样的简单查询编写 OCI 代码

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

这个想法是用iters = 0 调用OCIStmtExecute,因为

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

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

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

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

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

【问题讨论】:

    标签: c oracle oracle-call-interface


    【解决方案1】:

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

    【讨论】:

      猜你喜欢
      • 2020-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-01-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多