2016-12-01 48 views
0

請參閱以下過程。我沒有關閉光標,它工作正常。我在這裏錯過了什麼。是否強制關閉遊標或Oracle是否自動關閉它?是否必須關閉PLSQL塊中的遊標

create or replace procedure 
pr_cursor_test is 
cursor emp_cur is select empno,ename from emp; 
emprec emp_cur%rowtype; 
begin 
Open emp_cur; 
Loop 
Fetch emp_cur into emprec; 
exit when emp_cur%notfound; 
--Do Something 
dbms_output.put_line(emprec.ename); 
end loop; 
end; 

感謝

回答

0

This article on Oracle website是它很清楚。

在聲明包裝中的光標(即,不是 子程序包內),並且光標被打開,它會繼續開放 ,直到明確關閉或會話終止。

當在聲明部分聲明遊標(而不是在 包中)時,Oracle Database還會在其聲明的 塊終止時自動關閉它。然而,它仍然是一個很好的想法,可以自己明確關閉遊標。如果將光標移動到一個包中,您將擁有現在必需的CLOSE。 如果它是本地的,那麼包括一條CLOSE語句也會顯示 其他開發人員和您的經理,您正在關注。

在你的代碼示例中,CURSOR被聲明爲過程的一部分(不作爲包的一部分),這意味着當過程執行完成時,cursor自動關閉。但是,如果代碼中有OPEN cursor語句,則最好使用CLOSE cursor語句進行編碼練習。它使代碼在將來易於理解和支持。

相關問題