2013-06-13 23 views
1

我不得不寫OCI代碼像Select * from emp;OCI呼籲select語句

因爲我不知道有多少行將返回我不能預先分配我的緩衝區 所以我定義了一個void **指針,而我聯想一個簡單的查詢我輸出緩衝區。

的想法是調用OCIStmtExecuteiters = 0因爲

對於SELECT語句,如果iters不爲零,則定義必須已經語句句柄來完成。執行將iters行提取到這些預定義的緩衝區中,並根據預取行數預取更多行。如果您不知道SELECT語句將檢索多少行,請將iter設置爲零。

如果非SELECT語句的iters = 0,則此函數返回錯誤。

之後,我打算做OCIAttrGet(OCI_ATTR_ROW_COUNT)得到的數字由select語句返回的行,然後輸出緩衝器分配內存,然後通過指定行數,因此調用返回的OCIStmtFetch。

但是我得到的行數是0,即使有表返回的數據。

我的方法存在一些缺陷嗎?您能否指出缺陷

回答

0

您只需爲一行分配空間,然後重複調用OCIStmtFetch2(),直到達到結果集的結尾(這將給出錯誤代碼1403)。預取發生在由OCI本身維護的緩衝區中,對你來說透明,所以這種方法並不低效。