Время жизни курсора в Oracle - PullRequest
6 голосов
/ 07 июня 2010

Если я открою курсор и забуду закрыть его, как долго он будет существовать в Oracle?

Существуют ли какие-либо настройки для настройки времени жизни курсора?

Ответы [ 2 ]

4 голосов
/ 08 июня 2010

А также ответ DCookie:

Общий шаблон времени жизни курсора:

OPEN 
BIND
EXECUTE
FETCH...FETCH...FETCH
BIND
EXECUTE
FETCH...FETCH...FETCH
...
CLOSE

То есть курсор можно использовать повторно, привязав к нему новые переменные и выполнив его повторно.

PL / SQL также будет поддерживать кэш курсоров на уровне сеанса, чтобы избежать затрат на повторное открытие недавно закрытого курсора. Таким образом, курсор, который вы программно закрыли, все еще может быть открытым. Оракул закроет их за кулисами, когда это уместно.

Если курсор выходит за рамки видимости, его можно закрыть. Это если вызов или процедура похожа на:

DECLARE
  CURSOR c_1 IS SELECT ....;
BEGIN
  OPEN c_1;
  FETCH c_1 INTO...;
END;

затем после завершения выполнения c_1 выходит из области видимости (и не может быть снова вызван физически) и может быть закрыт. Это особенно полезно для обработки исключений, так как возможно возникновение исключения, выпрыгнув из процедуры и обходя все ваши 'CLOSE c_1;' код. Закрывая курсоры вне области видимости, вам не нужно беспокоиться о добавлении кода обработки исключений для этого.

Если ваш курсор имеет область действия сеанса (например, определенную в спецификации пакета PL / SQL или глобальном уровне тела или возвращенную клиенту через курсор ref), он никогда не выйдет из области действия таким образом, поэтому никогда не будет автоматически закрывается до отключения сеанса или через DBMS_SESSION.MODIFY_PACKAGE_STATE (DBMS_SESSION.FREE_ALL_RESOURCES);

2 голосов
/ 08 июня 2010

Я верю, что оно длится до тех пор, пока ваша сессия не пройдет или не закроет ее.

Вы можете настроить время жизни курсора, закрыв его, когда закончите; -)

Серьезно, полагаясь на некоторые настройки для закрытия ваших курсоров, вы просто скрываете проблемы и продвигаете ленивое программирование. Это также может оказать пагубное влияние на любой процесс, который на законных основаниях должен держать курсор открытым в течение более длительного периода времени.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...