powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Есть ли в Оракле блок Finally как в java
21 сообщений из 21, страница 1 из 1
Есть ли в Оракле блок Finally как в java
    #39503851
QWASQ1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
в java есть блок Finally который выполняется вне зависимости от того выдал ли опасный код ошибку или нет , есть ли что нибудь похожие в pl/sql так как приходится переписывать один и тот же код в саму функцию и еще и в exception
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39503855
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В PL/SQL - нет.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39503861
QWASQ1
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Elic,

то-есть надо один и тот же код прописывать дважды ? а какие нибудь лазейки , хитрости ?
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39503873
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QWASQ1,

Добавить в конце алгоритма exception
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39503876
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|Добавить в конце алгоритма exceptionВ котором продублировать код.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39503878
n0rd1c.c0ld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AlexFF__|QWASQ1,

Добавить в конце алгоритма exception
Но надо помнить, что это не совсем честная альтернатива. Придется дублировать код столько раз, сколько видов исключений обрабатывается в блоке exception.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39503884
ma1tus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Emulation of Finally ...

n0rd1c.c0ldПридется дублировать кодпроцедуры, функции... не ?
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39503889
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
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.
28.
29.
30.
31.
32.
33.
34.
35.
Declare 
 Subtype T_ERROR_MESSAGE is Varchar2(2000);
 
 ci_All_Is_Lost constant Number := -20100; 
 
 i Number;
 bitsOver Boolean := False;
 vc_error T_ERROR_MESSAGE;
 
 Cursor bad_cursor is  Select 1/0 From dual; 
 
Begin
  Open bad_cursor;
  
  <<TRY>>
  Begin  
   Fetch bad_cursor Into i;      
  Exception 
    WHEN ZERO_DIVIDE
      THEN
   <<CATCH>>     
        vc_error := dbms_utility.format_error_stack();
        bitsOver := true;  
  End;
  
  <<Finally>>  
  Begin
    Close bad_cursor;  
    IF bitsover
      THEN
        RAISE_APPLICATION_ERROR(ci_All_Is_Lost, 'Шеф! Все пропало! ('||vc_error||')');
    END IF;
  End;  
End;  
/ 
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39503891
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
n0rd1c.c0ldПридется дублировать код столько раз, сколько видов исключений обрабатывается в блоке exception.А умные люди продублируют только раз, обернув в ещё один блок.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504063
n0rd1c.c0ld
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ma1tus Emulation of Finally ...
n0rd1c.c0ldПридется дублировать кодпроцедуры, функции... не ?
Почему не? Вполне.
Я отметил, что это не будет честной альтернативой finally. Хотя бы потому что, невозможно забыть "вызвать" блок finally.

ElicА умные люди продублируют только раз, обернув в ещё один блок.
Рекомендации умных людей никто не оспаривает, но все равно придется делать re-raise в каждом обрабатываемом блоке exception. И помнить в дальнейшем, что re-raise обязателен.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504086
Andrey.L
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QWASQ1,

Что-то (хрустальный шар) мне подсказывает, что тебе не нужен блок finally или его аналоги, а тебе просто нужно провести все необходимые проверки до начала обработки. И если какая-то проверка не прошла, то генерировать исключение.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504099
Фотография AlexFF__|
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Где вы там умудряетесь получать дублирование кода?

Код: plsql
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.
declare
  procedure test( v number ) is
    ok_error  exception;
    v1  number;
  begin
    begin
      dbms_output.put_line( 'test=' || v);
      v1 := 1 / mod(v,2);
      raise ok_error;
    exception
      when others then
        dbms_output.put_line( 'finally' || v1 );
        raise;
    end;
  exception
    when ok_error then
      null;
    when others then
      dbms_output.put_line( SQLERRM );
  end;
begin
  for i in 1..10
  loop
    test(i);
  end loop;
end;
/


Что, конечно, не отменяет странности реализации =)
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504116
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
DECLARE
  finally exception;
BEGIN
  ... DO WORK ...;
  raise finally;
EXCEPTION when others then
  ... DO FINALLY ...;
  begin raise; exception when finally then null;
  WHEN OTHERS THEN -- или не others
     ... DO EXCEPTION ...
  end;
END;
/
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504117
booby
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
-2-,

стоило бы запретить писать на pl/sql,
если бы raise finally; был бы единственный способ использования языка.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504334
пробегал
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
booby-2-,

стоило бы запретить писать на pl/sql,
если бы raise finally; был бы единственный способ использования языка.

Это да.
Вообще, exception - механизм затратный.
Это уже много раз обсасывалось на habr.
И прогрессивное человечество, которому требуется high performance, пытается совсем не использовать их.
Но PL/SQL - все таки не язык для скоростных алгоритмов, а бизнес-язык, поэтому здесь уместны sql exception (no_data_found, too_many_rows), и некоторые остальныe из стандартныех.
Своих, высосанных из пальца, exception лучше не плодить, а обходиться другими способами.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504758
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elicn0rd1c.c0ldПридется дублировать код столько раз, сколько видов исключений обрабатывается в блоке exception.А умные люди продублируют только раз, обернув в ещё один блок.
Зачем код -то дублировать? case по sqlcode в большинстве случаев достаточно.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504759
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Правда так делать не надо. :)
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504760
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей АрсеньевElicпропущено...
А умные люди продублируют только раз, обернув в ещё один блок.Зачем код -то дублировать? case по sqlcode в большинстве случаев достаточно.Мсье точно знает, что такое finally?
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504764
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Elic,

сделать - что-то в конце блока, оттянув конец, каким бы ужасным он не был. )

Обсуждали вариант с бросанием левого исключения и его перехватом наравне с другими.
Дальше все просто. По кейс старая логика (один раз). Финал (один раз). Все что не вписывалось в старую логику еще раз на raise_new_exception (sqlcode, sqlerrm);

P.S. подход не без недостатков. И оборачивание в двойной блок, лучше. Но смысл тот же.

P.P.S. и да стектрейс будет не торт.
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504766
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Сергей Арсеньев,

Хотя блоков лучше не два, а три... :)


P.S. дайте мне таблеток от жадности и побольше. :)
...
Рейтинг: 0 / 0
Есть ли в Оракле блок Finally как в java
    #39504770
Андрей Панфилов
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
QWASQ1в java есть блок Finallyв Java-то есть, а в байткоде-то нет: https://stackoverflow.com/questions/29061627/why-does-the-java-compiler-copy-finally-blocks
...
Рейтинг: 0 / 0
21 сообщений из 21, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Есть ли в Оракле блок Finally как в java
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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