2016-08-15 38 views
0

我正在編寫一個OUT參數爲SYS_REFCURSOR的Oracle存儲過程。獲取號碼。從sys_refcursor返回的行

的過程確實像下面的東西:

  1. open ref_cursorA for select * from tableA
  2. 保存沒有。的記錄檢索到另一個表。
  3. 返回ref_cursorA用於生成Excel報告。

但是,沒有辦法知道在從光標中取出之前檢索的行數,但我真的需要保存no。在s.p.中檢索到的行我應該在這種情況下做什麼?

回答

2

當您打開遊標時,查詢尚未執行。它將在您獲取結果行時執行。最有可能的是執行將分段執行,即一次執行幾行。

所以行數只有在最後一行被提取時才知道。

如果你真的需要在存儲過程中的行數,你就必須執行,只是計算的行數在你面前打開一個額外的查詢並返回光標爲主查詢:

  1. select count(*) into var from tableA

  2. 保存在單獨的表

  3. open ref_cursorA for select * from tableA

  4. 的行數
  5. 回報cursorA

注:.Depending你的事務隔離級別,如果數據被插入,並在同一時間刪除COUNT(*)查詢將返回一個略有不同的計數。