2016-08-15 76 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(*)查询将返回一个略有不同的计数。