Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 необработанное исключение в хранимой процедуре. откат изменений  [new]
Tolka
Member

Откуда:
Сообщений: 199
не могу понять..

http://docs.oracle.com/cd/E11882_01/appdev.112/e25519/errors.htm#i1889

If a stored subprogram exits with an unhandled exception, PL/SQL does not roll back database changes made by the subprogram.

но он роллбечит...
drop table t;
create table t(v varchar2(3));

create or replace procedure p is
begin
   insert into t values ('aaa');
   insert into t values ('aaaa');   -- error DML
end;
/

-- rollbacks successfully inserted first row. WHY?
begin
   p();
end;
/

select * from t;   

-- successfully inserted first row is preserved
begin
   p();
exception 
   when others then 
      null;
end;
/

select * from t;
28 май 13, 16:11    [14360316]     Ответить | Цитировать Сообщить модератору
 Re: необработанное исключение в хранимой процедуре. откат изменений  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Tolka,

Unhandled Exceptions
Unhandled Exceptions
In database PL/SQL program units, an unhandled user-error condition or internal error condition that is not trapped by an appropriate exception handler causes the implicit rollback of the program unit.
28 май 13, 16:18    [14360389]     Ответить | Цитировать Сообщить модератору
 Re: необработанное исключение в хранимой процедуре. откат изменений  [new]
-2-
Member

Откуда:
Сообщений: 15330
Tolka
но он роллбечит...
pl/sql не "роллбечит" действия subprogram, но вызов с клиента откатыват свои незакомиченные изменения, если исключение проброшено на клиента.
28 май 13, 16:27    [14360471]     Ответить | Цитировать Сообщить модератору
 Re: необработанное исключение в хранимой процедуре. откат изменений  [new]
Tolka
Member

Откуда:
Сообщений: 199
--Eugene--,

спасибо!

выходит в одном месте оно написано так, в другом - по-другому
28 май 13, 16:27    [14360477]     Ответить | Цитировать Сообщить модератору
 Re: необработанное исключение в хранимой процедуре. откат изменений  [new]
orawish
Member

Откуда: Гадюкино-2 (City)
Сообщений: 15487
Tolka,

помедитируйте над

declare i number;
begin
   p();
exception when others then
  dbms_output.put_line(sqlerrm);
  select count(*) into i from t;
  dbms_output.put_line('i='||i);
--  raise;
end;
/

и
declare i number;
begin
   p();
exception when others then
  dbms_output.put_line(sqlerrm);
  select count(*) into i from t;
  dbms_output.put_line('i='||i);
  raise;
end;
/
28 май 13, 16:29    [14360499]     Ответить | Цитировать Сообщить модератору
 Re: необработанное исключение в хранимой процедуре. откат изменений  [new]
Tolka
Member

Откуда:
Сообщений: 199
-2-,

в склплюс по-умолчанию стоит WHENEVER SQLERROR NONE
т.е. он ничего не должен делать

из-любой IDE такой же эффект

формулировка в ссылке Евгена объясняет поведение
28 май 13, 16:30    [14360503]     Ответить | Цитировать Сообщить модератору
 Re: необработанное исключение в хранимой процедуре. откат изменений  [new]
--Eugene--
Member

Откуда: Боярышник
Сообщений: 2170
Tolka
выходит в одном месте оно написано так, в другом - по-другому
нет.
If a stored subprogram exits with an unhandled exception, PL/SQL does not roll back database changes made by the subprogram.
- это значит, что если подпрограмма завершается с исключительной ситуацией, PL/SQL-машина не производит отката изменений, совершенных этой подпрограммой

In database PL/SQL program units, an unhandled user-error condition or internal error condition that is not trapped by an appropriate exception handler causes the implicit rollback of the program unit.
- это значит, что необработанное пользовательское исключение (или внутреннее исключение), не перехваченое подходящим обработчиком, вызывает неявный откат программного модуля.

(собственно, как -2- уже и сказал)
28 май 13, 16:34    [14360526]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить