使用PostgreSQL,我使用以下结构存储函数:
create or replace function myfunc() returns refcursor as $$
declare rc refcursor := 'mycursor';
-- ...
begin;
-- ...
open rc for select ...;
return rc;
end; $$ language plpgsql;
这将返回我在强制性事务中使用的游标。我正在这样使用:
begin;
select myfunc();
fetch all in mycursor;
close mycursor;
commit;
但是在大多数示例和教程中,语句close mycursor;
只是被省略了。
我知道您在函数内部使用它时需要关闭它,但是当返回它时,也许commit;
自动关闭所有打开的游标吗?
那么,关闭游标真的有必要吗?
由于光标不再在范围内,因此不确定如何检查commit;
之后它是否仍然打开。
答案 0 :(得分:2)
CLOSE关闭打开的游标下面的门户。可以用于在事务结束之前释放资源,或释放光标变量以再次打开。
您可以将close cursor_name
用于releasing resources earlier than end of transaction
,因此,如果您不关闭游标,而end
或commit
则关闭交易,则完全没有关系。