powered by simpleCommunicator - 2.0.44     © 2025 Programmizd 02
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсорные циклы FOR
7 сообщений из 7, страница 1 из 1
Курсорные циклы FOR
    #32066289
babay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Господа! Кто-нить может прояснить ситуацию? Если внутри курсорного цикла возникает exception или необходимо выйти из цикла, курсор в этом случае будет закрыт автоматически или нет?
...
Рейтинг: 0 / 0
Курсорные циклы FOR
    #32066435
Linker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
сдается мне, что явный курсор не закрывается в этом случае. Книги рекомендуют закрывать его в обработке exeption'а.
...
Рейтинг: 0 / 0
Курсорные циклы FOR
    #32066581
babay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Каким образом? Ведь в том то и дело что он и открывается в начале цикла for и закрывается на end loop автоматически.
...
Рейтинг: 0 / 0
Курсорные циклы FOR
    #32066588
Фотография killed
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Обычный курсор в PL/SQL будет закрыт автоматически, при выходе из блока. Но конечно лучше закрывать его явно при обработке исключений как уже советовали.

А если курсор открыт через динамический сиквел, то курсор сам по себе закрыт не будет.
...
Рейтинг: 0 / 0
Курсорные циклы FOR
    #32066660
Stryker
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
На мой взгляд если в цикле не стоит Close Name_Cursor; тогда он открыт, но в твоем случае при возникновении ексепшен его надо обрабатать в теле цикла!
...
Рейтинг: 0 / 0
Курсорные циклы FOR
    #32066778
babay
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот что, собственно, имелось ввиду изначально.

Пример:
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
declare
  cursor с_test is select field1 from table1;
begin
  for var1 in c_test loop
    dbms_output.put_line(var1.field1);
    exit when var1.field1 = {условие};
  end loop;
end;


Такой блок отработает и не выдаст ошибок, но по окончании работы блока, курсор c_test останется открытым или нет? Exit передает управление за end loop, а автоматическое закрытие курсора происходит именно на end loop. Если же внутри тела цикла поставить close c_test, то выдается ошибка
PLS-00707: unsupported construct or internal error [2603].
...
Рейтинг: 0 / 0
Курсорные циклы FOR
    #32067542
ОВГ
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
пример такой
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
Connected to:
Oracle8i Release  8 . 1 . 7 . 4 . 1  - Production
JServer Release  8 . 1 . 7 . 4 . 1  - Production

SQL> 
SQL> 
SQL> declare
   2     cursor с_test is
   3       select RN from FORM_326;
   4   begin
   5     for var1 in с_test loop
   6       if с_test%ISOPEN then
   7         dbms_output.put_line('c_test%ISOPEN');
   8       end if;
   9       exit;
  10     end loop;
  11     if с_test%ISOPEN then
  12       dbms_output.put_line('end: c_test%ISOPEN');
  13     else
  14       dbms_output.put_line('end: not c_test%ISOPEN');
  15     end if;
  16   end;
  17   Input truncated to  1  characters
/
c_test%ISOPEN
end: not c_test%ISOPEN

PL/SQL procedure successfully completed.
...
Рейтинг: 0 / 0
7 сообщений из 7, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Курсорные циклы FOR
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]