2012-02-22 92 views
1

我在Oracle中编写存储过程和函数,它将ref游标返回给ColdFusion,并且一切正常。但是我读过的所有内容都表明,当我完成这些操作时,我需要显式关闭游标或引用游标,否则我可能会稍后耗尽手柄。关闭来自coldfusion的引用光标

但是,如果我关闭游标在函数/ stored proc的末尾,数据不会返回到ColdFusion。

那么一旦完成它,我该如何关闭引用光标?

回答

2

只要数据库连接关闭,光标也会关闭。在CF管理员中,您对数据库连接的数量有限制。如果对传递给Oracle的每个值使用cfqueryparam,则将允许对相同查询重复使用相同的连接(除非达到超时)。您必须确保Oracle中的游标池限制和CF管理员中的连接限制是一致的。这听起来像这个应用程序从来没有问题,所以这可能是这样的。

+0

太棒了,谢谢。这似乎是工作,但我没有找到任何支持任何一方的东西。 – 2012-02-23 14:19:56

0

您的ColdFusion应用程序将负责关闭返回给它的游标。

我不是ColdFusion专家,所以我不完全确定你需要的语法。但与数据库交互的客户端语言总是会有某种对象或结构来表示您从中获取的结果集。当你完成获取数据时,会有一些关闭结果集的方法close。这也将关闭数据库中的REF CURSOR。确保您的ColdFusion应用程序始终调用close方法,即使您在提取数据时出现异常 - 游标泄漏最常见的原因是客户端应用程序不会关闭异常处理程序中的游标。

+0

这就是它 - 既不是[cfstoredproc](http://cfquickdocs.com/cf9/#cfstoredproc)或[cfinvoke](http://cfquickdocs.com/cf9/#cfinvoke)(这是你如何调用存储程序或功能)有任何类型的密切方法或行动与它们一起调用。 我会注意到,我只是继承了应用程序有数百个函数返回裁判游标,正如我所知道的,他们从来没有遇到泄漏问题 - 但它对我来说没有意义在我读过的所有内容上。 – 2012-02-22 21:24:44