Pl/Sql 打开游标问题

Pl/Sql open cursor problems

我有这样的代码,

create or replace function ... return types.cursortype 
as 
    l_cursor    types.cursorType; 
begin 
    open l_cursor for select ... ; 
    return l_cursor; 
end; 

此代码用于每天 return 数百条记录。 这些打开的游标会导致任何内存泄漏问题吗?

有什么方法可以只在过程中关闭这种未关闭的游标吗?

任何 SQL 用于跟踪此类打开的游标?

如果重复请添加参考..

Will these open cursors cause any memory leak issue ?

如果您在使用(对于explicit 游标)后不让它们保持打开状态,则否,打开游标时,oracle 会创建一个context area, PL/SQL 通过游标控制上下文区域,该游标保存 SQL 语句返回的结果。对于 implicit 游标,没有什么可担心的

Is there any way to close such unclosed cursors in the procedure only ?

可以,但不要,因为你打开它是为了在程序或函数之外使用,你真的不知道它会在何时何地使用以及如何使用使用时间较长,使用完毕后必须关闭光标。 (调用过程或函数时游标会打开)

Any SQL for keeping track of such open cursor ?

,可以查询v$sesstatv$statnamev$session SYS视图:

select *
from v$sesstat ss, v$statname sn, v$session s
where ss.statistic# = sn.statistic#  and s.sid=ss.sid
and sn.name = 'opened cursors current';

here 有一篇关于监视游标的好文章。