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$sesstat
、v$statname
和v$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 有一篇关于监视游标的好文章。
我有这样的代码,
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$sesstat
、v$statname
和v$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 有一篇关于监视游标的好文章。