powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Для чего этот raise
11 сообщений из 11, страница 1 из 1
Для чего этот raise
    #39431528
П_а_т_р_и_к
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ДД! В одной книжке (автор Фейерштейн) приводится такой код:
Код: plsql
1.
2.
3.
4.
5.
6.
1 EXCEPTION
2   WHEN NO_DATA_FOUND
3   THEN 
4          -- Ошибочный идентификатор счета
5         log_error(...);
6         RAISE;

В строке 6 вызывается снова RAISE, зачем?
...
Рейтинг: 0 / 0
Для чего этот raise
    #39431530
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П_а_т_р_и_кснова RAISE, зачем?Такова задумка именно этого кода.
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Для чего этот raise
    #39431531
П_а_т_р_и_к
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ElicП_а_т_р_и_кснова RAISE, зачем?Такова задумка именно этого кода.
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM Лучше бы не отсылали на три буквы, а ответили на вопрос.
...
Рейтинг: 0 / 0
Для чего этот raise
    #39431537
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В том месте задумкой автора предусмотрено только протоколирование именно той исключительной ситуации, но не реакция на неё.
Ещё раз: http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM
...
Рейтинг: 0 / 0
Для чего этот raise
    #39431714
andreymx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П_а_т_р_и_кElicпропущено...
Такова задумка именно этого кода.
http://www.bugtraq.ru/forum/faq/general/smart-questions.html] RTFM Лучше бы не отсылали на три буквы, а ответили на вопрос.был у меня случай лет 10 назад
Звонит юзер
Говорит - в одном отчете 100 строк, а в другом 99. Почему?
Оказалось, во втором случае разраб в процедуре заполнения времянки использовал функцию, в которой no_data_found в какой-то ему известный лог данные писал, но рейза как раз не было. Т.е. ошибка была, но на самом деле никто её не видел
...
Рейтинг: 0 / 0
Для чего этот raise
    #39432229
stax..
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
П_а_т_р_и_к,

что-б передать исключение в вызывающую процедуру (ниже уровнем), пусть она принимает решение

в р-нет raise- она при выплнении не генерит исключиние
в p-reise есть, оно переходит в вызывающий блок, котрый логирует и передаю ниже

поексперементируйте и усе уляжется
Код: 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.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
69.
70.
71.
72.
73.
74.
75.
76.
77.
78.
79.
declare
 procedure p (p_ename varchar2) is
   v varchar2(30);
 begin
   select job into v from emp where ename=p_ename;
  exception
  WHEN NO_DATA_FOUND
  THEN 
          -- Ошибочный идентификатор счета
         --log_error(...); 
         dbms_output.put_line('Нет или увалился '||p_ename); --пишем в лог
  end;
 procedure p_raise (p_ename varchar2) is
   v varchar2(30);
 begin
     select job into v from emp where ename=p_ename;
   exception
   WHEN NO_DATA_FOUND
   THEN 
      -- Ошибочный идентификатор счета
      --log_error(...); 
      dbms_output.put_line('Нет или увалился - '||p_ename); --пишем в лог
      RAISE;
 end;
begin
   p('Stanislav');
   p_raise('Stax'); --переставте вызовы местами
exception
WHEN NO_DATA_FOUND
   THEN 
   dbms_output.put_line('Не знаю что с етим делять, к ДБА пусть разбирается!'); --пишем в лог
   RAISE;
end;
/

  1  declare
  2   procedure p (p_ename varchar2) is
  3     v varchar2(30);
  4   begin
  5     select job into v from emp where ename=p_ename;
  6    exception
  7    WHEN NO_DATA_FOUND
  8    THEN
  9            -- Ошибочный идентификатор счета
 10           --log_error(...);
 11           dbms_output.put_line('Нет или увалился '||p_ename); --пишем в лог
 12    end;
 13   procedure p_raise (p_ename varchar2) is
 14     v varchar2(30);
 15   begin
 16       select job into v from emp where ename=p_ename;
 17     exception
 18     WHEN NO_DATA_FOUND
 19     THEN
 20        -- Ошибочный идентификатор счета
 21        --log_error(...);
 22        dbms_output.put_line('Нет или увалился - '||p_ename); --пишем в лог
 23        RAISE;
 24   end;
 25  begin
 26     p('Stanislav');
 27     p_raise('Stax'); --переставте вызовы местами
 28  exception
 29  WHEN NO_DATA_FOUND
 30     THEN
 31     dbms_output.put_line('Не знаю что с етим делять, к ДБА пусть разбирается!'); --пишем в лог
 32     RAISE;
 33* end;
SQL> /

SQL> /
Нет или увалился Stanislav
Нет или увалился - Stax
Не знаю что с етим делять, к ДБА пусть разбирается!
declare
*
ERROR at line 1:
ORA-01403: no data found
ORA-06512: at line 32



.....
stax
...
Рейтинг: 0 / 0
Для чего этот raise
    #39432522
фкдчarlx
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Stax..,

и еще, с таким raise фигня в том что он место ошибки показывает в своей строке, а не где была ошибка на самом деле.
...
Рейтинг: 0 / 0
Для чего этот raise
    #39432549
фкдчarlxи еще, с таким raise фигня в том что он место ошибки показывает в своей строке, а не где была ошибка на самом деле.ну, а если убрать такой raise из блока exception, где покажет ошибку?
...
Рейтинг: 0 / 0
Для чего этот raise
    #39432948
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Для адекватной диагностики (ну, или почти адекватной) использую DBMS_UTILITY.format_error_backtrace
Пример:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DECLARE
....
err_code_                       NUMBER; --код ошибки
err_descr_                      VARCHAR2(2048 CHAR); --описание ошибки
td_                             TIMESTAMP; --время начала транзакции
.....
BEGIN
....
 WHEN OTHERS THEN
       err_code_ := SQLCODE;
       err_descr_ := SQLERRM || CHR(10) || DBMS_UTILITY.format_error_backtrace;
       INSERT INTO errlog_logs_abc (aa, bb, cc, err_code, err_descr, td)
            VALUES (aa_, bb_, cc_, err_code_, err_descr_, td_);
END;



Результат:
Код: plsql
1.
2.
3.
4.
5.
6.
ORA-37162: OLAP error
XOQ-01710: unknown build item "A2_CU.DIM_TIME"
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2809
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 3025
ORA-06512: at "SYS.DBMS_SNAPSHOT", line 2994
ORA-06512: at "A2_SUPPORT.UTIL_SUPPORT", line 290


Строка 290 действительно соответствует точке возникновения ошибки.
RAISE не использовал -- как правильно указали предшественники, появление RAISE в коде вызовет не только логирование, но прерывание процесса. Фейерштейну нужно было прерывание, мне -- нет.
...
Рейтинг: 0 / 0
Для чего этот raise
    #39432970
XMLer
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vladimir FilinДля адекватной диагностики (ну, или почти адекватной) использую DBMS_UTILITY.format_error_backtrace
Пример:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
DECLARE
....
err_code_                       NUMBER; --код ошибки
err_descr_                      VARCHAR2(2048 CHAR); --описание ошибки
td_                             TIMESTAMP; --время начала транзакции
.....
BEGIN
....
 WHEN OTHERS THEN
       err_code_ := SQLCODE;
       err_descr_ := SQLERRM || CHR(10) || DBMS_UTILITY.format_error_backtrace;
       INSERT INTO errlog_logs_abc (aa, bb, cc, err_code, err_descr, td)
            VALUES (aa_, bb_, cc_, err_code_, err_descr_, td_);
END;




Стесняюсь спросить, а в случае rollback, почти адекватная диагностика Вам не интересна?
...
Рейтинг: 0 / 0
Для чего этот raise
    #39433032
Фотография Vladimir Filin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
XMLer,
я упрощенный код привёл, только лишь поддерживая тему:
фкдчarlxStax..,
и еще, с таким raise фигня в том что он место ошибки показывает в своей строке, а не где была ошибка на самом деле.
Не более того.
...
Рейтинг: 0 / 0
11 сообщений из 11, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Для чего этот raise
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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