2012-02-22 53 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