powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / пользовательские exception
47 сообщений из 47, показаны все 2 страниц
пользовательские exception
    #39497832
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Пишу следующий код:
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
select nvl(b.client_id,0)
      into id_client
      from bsc b
      where b.bsc_id = r_id;

select p.profile_id 
         into p_count
         from profile p 
         where p.client_id=id_client
           and rownum=1;


в обоих случаях может возникнуть исключение NO_DATA_FOUND
Но мне нужно понимать в каком именно случае это исключение возникает, в первом или во втором.
читал про исключения объявленные пользователем. но вы этом случае предлагается вызывать его самостоятельно, что-то вроде:
Код: plsql
1.
2.
if id_client=0 then
   raise my_exception;


И дальше уже в конце (как правило) кода обрабатывать его.
Но как вызвать конкретное объявленное пользовательское исключение, если может возникать ошибка NO_DATA_FOUND ? Как понять в каком именно месте возникла эта NO_DATA_FOUND...?
...
Рейтинг: 0 / 0
пользовательские exception
    #39497846
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
BEGIN
select nvl(b.client_id,0)
      into id_client
      from bsc b
      where b.bsc_id = r_id;
  EXCEPTION
    WHEN NO_DATA_FOUND
      THEN ... -- исключение в первом.
END;
BEGIN
select p.profile_id 
         into p_count
         from profile p 
         where p.client_id=id_client
           and rownum=1;
  EXCEPTION
    WHEN NO_DATA_FOUND
      THEN ... -- исключение в втором.
END;



SY.
...
Рейтинг: 0 / 0
пользовательские exception
    #39497849
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,
шо
опять ???
...
Рейтинг: 0 / 0
пользовательские exception
    #39497856
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,

NO_DATA_FOUND - не исключение!
В исключении (exception) ты обрабатываешь NO_DATA_FOUND если нужно)

имхо используй логирующую табличку чтобы писать NO_DATA_FOUND возникновение.
...
Рейтинг: 0 / 0
пользовательские exception
    #39497862
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййRMagistr2015,
шо
опять ???
Нет, в том посте другой смысл был
...
Рейтинг: 0 / 0
пользовательские exception
    #39497863
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxarockRMagistr2015,

NO_DATA_FOUND - не исключение!
В исключении (exception) ты обрабатываешь NO_DATA_FOUND если нужно)

имхо используй логирующую табличку чтобы писать NO_DATA_FOUND возникновение.
Спасибо, уже использую )))
...
Рейтинг: 0 / 0
пользовательские exception
    #39497864
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SY
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
BEGIN
select nvl(b.client_id,0)
      into id_client
      from bsc b
      where b.bsc_id = r_id;
  EXCEPTION
    WHEN NO_DATA_FOUND
      THEN ... -- исключение в первом.
END;
BEGIN
select p.profile_id 
         into p_count
         from profile p 
         where p.client_id=id_client
           and rownum=1;
  EXCEPTION
    WHEN NO_DATA_FOUND
      THEN ... -- исключение в втором.
END;



SY.
Спасибо большое за совет, но тогда пропадает вся прелесть блока exception, когда все ошибки обрабатываются визуально в одном месте (в конце программы), повышая тем самы читаемость программы )))
Есть ли другие возможности как-то поименовать эти exception, ну в общем как-то по красивее это сделать? )))
...
Рейтинг: 0 / 0
пользовательские exception
    #39497868
RMagistr2015, эстет ты наш, тебе таки шашечки или ехать?
...
Рейтинг: 0 / 0
пользовательские exception
    #39497869
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015поименовать эти exception, ну в общем как-то по красивее это сделать? )))
да можешь сделать вот так)

Код: 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.
BEGIN
select nvl(b.client_id,0)
      into id_client
      from bsc b
      where b.bsc_id = r_id;
/*************************/
---- исключение в первом.--
/***********************/
  EXCEPTION
    WHEN NO_DATA_FOUND
      THEN ... 
END;
BEGIN
select p.profile_id 
         into p_count
         from profile p 
         where p.client_id=id_client
           and rownum=1;
/*************************/
---- исключение в втором.--
/***********************/
  EXCEPTION
    WHEN NO_DATA_FOUND
      THEN ... 
END;
...
Рейтинг: 0 / 0
пользовательские exception
    #39497878
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare
  l_num number;
begin
  select count(*)
  into l_num
  from dual
  where 1 = 0;
  
  if l_num = 0 then 
    raise_application_error(-20001, 'Магистр, одумайся');
  end if;
  
end;
/
...
Рейтинг: 0 / 0
пользовательские exception
    #39497880
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015пропадает вся прелесть Не вся, а только половина, так твоя прелесть раздвоилась до этого на два запроса.
...
Рейтинг: 0 / 0
пользовательские exception
    #39497889
Код: 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.
set serveroutput on
declare
  l_num               number;
  l_magistr_not_found exception;
  l_magistr_pupsik    exception;
begin

  begin
    select 1
    into l_num
    from dual
    where 1 = 1;
  exception
    when no_data_found then
      raise l_magistr_not_found;
  end;  
  
  begin
    select 1
    into l_num
    from dual
    where 2 = 3;
  exception
    when no_data_found then
      raise l_magistr_pupsik;
  end;  
  
  exception
    when l_magistr_not_found then dbms_output.put_line('Привет!');
    when l_magistr_pupsik    then dbms_output.put_line('Пока!');
end;
/
...
Рейтинг: 0 / 0
пользовательские exception
    #39497893
Petya.А
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именуй меня полностью
Код: plsql
1.
2.


Код: 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.
declare
  l_num               number;
  l_exception    exception;
  l_message    varchar2(4000);

begin

  begin
    select 1
    into l_num
    from dual
    where 1 = 1;
  exception
    when no_data_found then
      l_message := 'Hello';
      raise l_exception;
  end;  
  
  begin
    select 1
    into l_num
    from dual
    where 2 = 3;
  exception
    when no_data_found then
      l_message := 'Bye-bye';
      raise l_exception;
  end;  
  
  exception
    when l_exception then raise_application_error(-20666, l_message);
end;
/
...
Рейтинг: 0 / 0
пользовательские exception
    #39497906
Petya.А,
кто больше предложит вариантов для магистра, который и не магистр вовсе?
...
Рейтинг: 0 / 0
пользовательские exception
    #39497924
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
saxarockRMagistr2015,

NO_DATA_FOUND - не исключение!
В исключении (exception) ты обрабатываешь NO_DATA_FOUND если нужно)

имхо используй логирующую табличку чтобы писать NO_DATA_FOUND возникновение.
https://docs.oracle.com/cd/E18283_01/appdev.112/e17126/errors.htm#BABIIEFC

Table 11-3 PL/SQL Predefined Exceptions
NO_DATA_FOUND +100

.....
stax
...
Рейтинг: 0 / 0
пользовательские exception
    #39497935
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Но как вызвать конкретное объявленное пользовательское исключение, если может возникать ошибка NO_DATA_FOUND ? Как понять в каком именно месте возникла эта NO_DATA_FOUND...?
....
но тогда пропадает вся прелесть блока exception, когда все ошибки обрабатываются визуально в одном месте (в конце программы), повышая тем самы читаемость программы )))
Есть ли другие возможности как-то поименовать эти exception, ну в общем как-то по красивее это сделать? )))
красота кончено же спасёт мир (угробит его).
можно сделать всё, что пожелаешь, и даже зараз:
Код: 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.
declare
  message varchar2(50);
  cnt1    integer;
  cnt2    integer;
  id_client integer;
  p_count integer;
  no_data_found_u exception;
  pragma exception_init(no_data_found_u,-20000);
begin
  select count(1) into cnt1 from dual where 1 = 3;
  if cnt1 < 1 then
    message := 'no data found в первом запросе';
    goto except_block;
  else
    select 1
      into id_client
      from dual
     where 1 = 1;
  end if;
  select count(4) into cnt2 from dual where 2 = 6;
  if cnt2 < 1 then
    message := 'no data found во втором запросе';
    goto except_block;
  else
    select 1
      into p_count
      from dual
     where 1=1;
  end if;

/**************************************************/
/*ОДИН ПРЕЛЕСТНЫЙ ВИЗУАЛЬНО КРАСИВЫЙ ПОИМЕНОВАННЫЙ*/
/*БЛОК ИСКЛЮЧЕНИЯ  В КОНЦЕ ПРОГРАММЫ, ПОНИМАЮЩИЙ**/
/*В КАКОМ ИМЕННО МЕСТЕ ВОЗНИКЛА ЭТА NO_DATA_FOUND**/
/***********************************************/
  <<except_block>>
  if message is not null then
  raise_application_error(-20000, message);
  end if;

end;
...
Рейтинг: 0 / 0
пользовательские exception
    #39497952
Не Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Fogel no_data_found_u exception;
pragma exception_init(no_data_found_u,-20000);


Это зачем?
...
Рейтинг: 0 / 0
пользовательские exception
    #39497971
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Fogel
Код: 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.
declare
  message varchar2(50);
  cnt1    integer;
  cnt2    integer;
  id_client integer;
  p_count integer;
  no_data_found_u exception;
  pragma exception_init(no_data_found_u,-20000);
begin
 здесь запись еще была
  select count(1) into cnt1 from dual where 1 = 3;
  if cnt1 < 1 then
    message := 'no data found в первом запросе';
    goto except_block;
  else
 за время (вот сдесь) проверки удалили запись, шо будете делать?
    select 1
      into id_client
      from dual
     where 1 = 1;
  end if;
  select count(4) into cnt2 from dual where 2 = 6;
  if cnt2 < 1 then
    message := 'no data found во втором запросе';
    goto except_block;
  else
    select 1
      into p_count
      from dual
     where 1=1;
  end if;

/**************************************************/
/*ОДИН ПРЕЛЕСТНЫЙ ВИЗУАЛЬНО КРАСИВЫЙ ПОИМЕНОВАННЫЙ*/
/*БЛОК ИСКЛЮЧЕНИЯ  В КОНЦЕ ПРОГРАММЫ, ПОНИМАЮЩИЙ**/
/*В КАКОМ ИМЕННО МЕСТЕ ВОЗНИКЛА ЭТА NO_DATA_FOUND**/
/***********************************************/
  <<except_block>>
  if message is not null then
  raise_application_error(-20000, message);
  end if;

end;



....
stax
...
Рейтинг: 0 / 0
пользовательские exception
    #39498012
xenix
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автор--здесь запись еще была
--за время (вот сдесь) проверки удалили запись, шо будете делать?

Так как, все-таки, правильно проверять существование записи и гарантировать что параллельно выполняющееся нечто ее не грохнет?
...
Рейтинг: 0 / 0
пользовательские exception
    #39498067
проходил мимо...
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
xenixавтор--здесь запись еще была
--за время (вот сдесь) проверки удалили запись, шо будете делать?

Так как, все-таки, правильно проверять существование записи и гарантировать что параллельно выполняющееся нечто ее не грохнет?
Залочить её (запись). Или проверять и работать с ней в одном sql-предложении.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498078
saxarock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
StaxTable 11-3 PL/SQL Predefined Exceptions
NO_DATA_FOUND +100 - ога, ога Table 11-3 lists the names and error codes of the predefined exceptions.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498087
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именуй меня полностью
Код: 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.
set serveroutput on
declare
  l_num               number;
  l_magistr_not_found exception;
  l_magistr_pupsik    exception;
begin

  begin
    select 1
    into l_num
    from dual
    where 1 = 1;
  exception
    when no_data_found then
      raise l_magistr_not_found;
  end;  
  
  begin
    select 1
    into l_num
    from dual
    where 2 = 3;
  exception
    when no_data_found then
      raise l_magistr_pupsik;
  end;  
  
  exception
    when l_magistr_not_found then dbms_output.put_line('Привет!');
    when l_magistr_pupsik    then dbms_output.put_line('Пока!');
end;
/



Прикольно )))
Петин вариант можно то же рассматривать, хоть его и залочили за что-то.
Спасибо ))))
...
Рейтинг: 0 / 0
пользовательские exception
    #39498089
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Лишнее сканирование
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
declare
  l_num number;
begin
  select count(*)
  into l_num
  from dual
  where 1 = 0;
  
  if l_num = 0 then 
    raise_application_error(-20001, 'Магистр, одумайся');
  end if;
  
end;
/



Ок, конкретно в вашем примере работает, а если с реальными и нужно действительн что-то посчитать? ))
...
Рейтинг: 0 / 0
пользовательские exception
    #39498107
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Именуй меня полностью
Код: 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.
set serveroutput on
declare
  l_num               number;
  l_magistr_not_found exception;
  l_magistr_pupsik    exception;
begin

  begin
    select 1
    into l_num
    from dual
    where 1 = 1;
  exception
    when no_data_found then
      raise l_magistr_not_found;
  end;  
  
  begin
    select 1
    into l_num
    from dual
    where 2 = 3;
  exception
    when no_data_found then
      raise l_magistr_pupsik;
  end;  
  
  exception
    when l_magistr_not_found then dbms_output.put_line('Привет!');
    when l_magistr_pupsik    then dbms_output.put_line('Пока!');
end;
/


Выдает ошибку на втором exception (Во вложении)
...
Рейтинг: 0 / 0
пользовательские exception
    #39498121
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Кто-нибудь знает почему там ошибка возникает при появлении второго exception ? (((((((
...
Рейтинг: 0 / 0
пользовательские exception
    #39498178
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,

Может руки из жопы растут? Или своя голова думать не умеет? Или потому что чукча не читатель?

В sqlplus скрипт работает.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498223
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envRMagistr2015,

Может руки из жопы растут? Или своя голова думать не умеет? Или потому что чукча не читатель?

В sqlplus скрипт работает.

А в PL\SQL Нет )))
:'-(((
:'-(((
:'-(((
...
Рейтинг: 0 / 0
пользовательские exception
    #39498243
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015, с pl/sql developer никогда не работал, но вроде бы у него отдельные воркспейсы для pl/sql и для sql.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498247
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisRMagistr2015, с pl/sql developer никогда не работал, но вроде бы у него отдельные воркспейсы для pl/sql и для sql.
Ну как бы это понятно )))
Ну так у меня не получается в PL/SQL как быть-то???
Что делать? Как сделать так что бы заработало???
Сейчас просто один общий eception в конце программы (((
...
Рейтинг: 0 / 0
пользовательские exception
    #39498256
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Ну как бы это понятно )))
Ну так у меня не получается в PL/SQL как быть-то???
Что делать? Как сделать так что бы заработало???
Сейчас просто один общий eception в конце программы (((

Я не знаю, что тебе "ну это понятно", а что тебе вообще не понятно. На Oracle Sql Developer - работает. Как сделать? поставь его. Дело 5 минут.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498257
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisRMagistr2015Ну как бы это понятно )))
Ну так у меня не получается в PL/SQL как быть-то???
Что делать? Как сделать так что бы заработало???
Сейчас просто один общий eception в конце программы (((

Я не знаю, что тебе "ну это понятно", а что тебе вообще не понятно. На Oracle Sql Developer - работает. Как сделать? поставь его. Дело 5 минут.
Мне надо именно в PL
...
Рейтинг: 0 / 0
пользовательские exception
    #39498261
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015, ну тогда убери "set serveroutput on". Что ж ты такой неловкий.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498263
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,
ну так обратись в поддержку PL/SQL, там тебе все расжуют.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498264
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
123ййRMagistr2015,
ну так обратись в поддержку PL/SQL, там тебе все расжуют.
Правильно ли я понял, что так нельзя в pl/sql следлать как я хочу...? )))
...
Рейтинг: 0 / 0
пользовательские exception
    #39498267
Lary Denis
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015Правильно ли я понял, что так нельзя в pl/sql следлать как я хочу...? )))

а ты хорош! да, все правильно понял.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498268
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisRMagistr2015, ну тогда убери "set serveroutput on". Что ж ты такой неловкий.
О чем это вы?
...
Рейтинг: 0 / 0
пользовательские exception
    #39498269
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Lary DenisRMagistr2015Правильно ли я понял, что так нельзя в pl/sql следлать как я хочу...? )))
да, все правильно понял.

Жаль :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-((( :'-(((
...
Рейтинг: 0 / 0
пользовательские exception
    #39498270
K790
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,

Покажи полный скрин твоего выполнения. А не какой-то непонятный кусок.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498271
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
K790RMagistr2015,

Покажи полный скрин твоего выполнения. А не какой-то непонятный кусок.
Так это он и есть
...
Рейтинг: 0 / 0
пользовательские exception
    #39498296
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,

Скрипт не мог инициировать encountered symbol 'FUNCTION', так что ты или в очередной раз гонишь пургу или до сих пор не смог разобраться с используемой тобой IDE.

Предположу, что ты, как обычно не думая, выполняешь скрипт в неявной обёртке create or replace function ...
...
Рейтинг: 0 / 0
пользовательские exception
    #39498312
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
envRMagistr2015,

Скрипт не мог инициировать encountered symbol 'FUNCTION', так что ты или в очередной раз гонишь пургу или до сих пор не смог разобраться с используемой тобой IDE.

Предположу, что ты, как обычно не думая, выполняешь скрипт в неявной обёртке create or replace function ...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create or replace function rtfg (r_id number) return number is
  id_client number;
  p_count   number;
  summ      number;
begin
  select nvl(b.client_id, 0)
    into id_client
    from bsc b
   where b.bsc_id = r_id;

  select count(p.profile_id)
    into p_count
    from profile p
   where p.client_id = id_client;
   
  summ := id_client + p_count;
  return summ;
end;


Вот что хочу написать, и в первом и во втором случае может возникнуть Exception (((
раз уж нельзя в двух местах поставить exception, то что поделать, придётся ставить в одном месте....
Или есть варианты? ))))
...
Рейтинг: 0 / 0
пользовательские exception
    #39498316
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,
RMagistr2015и в первом и во втором случае может возникнуть Exception
envчукча не читатель
Ответ на твой вброс вопрос уже дан. Достаточно подумать головой и заглянуть в доку.
...
Рейтинг: 0 / 0
пользовательские exception
    #39498321
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
env,

Спасибо ещё раз ))
...
Рейтинг: 0 / 0
пользовательские exception
    #39498334
Фотография env
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015,
RMagistr2015раз уж нельзя в двух местах поставить exception
Код: 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.
create or replace function de_bill (p_n number) return varchar2 as
 l_n number;
begin

 begin
...
 end;
...

 l_n := 1/p_n;
  
 return 'Yep';
exception 
  when others 
    then 
      if sqlcode in (-20005, -20007, -20019) then raise; end if; 
      raise_application_error(-20001,'Unknown error');
end;
/

select de_bill(1) from dual;

DE_BILL(1)                                                                     
--------------------------------------------------------------------------------
Yep  

select de_bill(0) from dual;

SQL Error: ORA-20001: Unknown error

select de_bill(5) from dual;

SQL Error: ORA-20005: p_n = 5!

select de_bill(7) from dual;

SQL Error: ORA-20007: p_n = 7!
...
Рейтинг: 0 / 0
пользовательские exception
    #39498395
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
RMagistr2015envRMagistr2015,

Скрипт не мог инициировать encountered symbol 'FUNCTION', так что ты или в очередной раз гонишь пургу или до сих пор не смог разобраться с используемой тобой IDE.

Предположу, что ты, как обычно не думая, выполняешь скрипт в неявной обёртке create or replace function ...

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
create or replace function rtfg (r_id number) return number is
  id_client number;
  p_count   number;
  summ      number;
begin
  select nvl(b.client_id, 0)
    into id_client
    from bsc b
   where b.bsc_id = r_id;

  select count(p.profile_id)
    into p_count
    from profile p
   where p.client_id = id_client;
   
  summ := id_client + p_count;
  return summ;
end;


Вот что хочу написать, и в первом и во втором случае может возникнуть Exception (((
раз уж нельзя в двух местах поставить exception, то что поделать, придётся ставить в одном месте....
Или есть варианты? ))))

чем не устраивает 20688970 ?


если возникнет Exception , как должна отреагировать ф-ция (что вернуть)?

..........
stax
...
Рейтинг: 0 / 0
пользовательские exception
    #39498396
RMagistr2015
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Stax,

Тема закрыта, ответ получен уже
...
Рейтинг: 0 / 0
пользовательские exception
    #39499185
Фотография Fogel
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не ElicFogel no_data_found_u exception;
pragma exception_init(no_data_found_u,-20000);


Это зачем?
начал писать, чтобы не было слова exception, а только raise в каждом блоке, а потом подумал, что человек же хотел только 1 раз - в итоге начал писать сценарий, а закончил поэмой, забыв убрать лишние действующие лица.

StaxFogel
Код: plsql
1.
2.
3.
4.
5.
6.
7.
 здесь запись еще была
select count(1) into cnt1 from dual where 1 = 3;
  if cnt1 < 1 then
    message := 'no data found в первом запросе';
    goto except_block;
  else
 за время (вот сдесь) проверки удалили запись, шо будете делать?



с учётом подобных возможностей в изменениях
обычно используют
for update nowait
но топикстартеру подавай красоту, а не как все нормальные люди пишут, поэтому пусть про красоту дальше подумает уже сам...
...
Рейтинг: 0 / 0
47 сообщений из 47, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / пользовательские exception
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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