Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Неявный откат транзакции для анонимного блока / 17 сообщений из 17, страница 1 из 1
16.02.2017, 15:32
    #39405846
Guest_rollback_123
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
Странная ситуация...
Использую SQL Navigator 7.0.0 и выполняю следующий код:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
create table ttt(s number)
/

begin
   insert into ttt values (1);
   raise no_data_found;
end;
/

select * from ttt;



При выполнении select, записи в таблице ttt не вижу, как-будто происходит неявный откат транзакции. Вроде бы должна выполниться вставка записи, сгенерироваться исключение и все, без отката самой вставки.
С чем это может быть связано?
...
Рейтинг: 0 / 0
16.02.2017, 15:54
    #39405870
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
Блок, в котором возникло исключение, откатывается целиком.
...
Рейтинг: 0 / 0
16.02.2017, 16:10
    #39405893
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
AmKadБлок, в котором возникло исключение, откатывается целиком.Слишком упрощённо, поэтому технически неправильно.
...
Рейтинг: 0 / 0
16.02.2017, 16:28
    #39405915
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
Guest_rollback_123и все, без отката самой вставки.RTFM statement-level rollback (FAQ)
...
Рейтинг: 0 / 0
16.02.2017, 16:46
    #39405939
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
ElicGuest_rollback_123и все, без отката самой вставки.RTFM statement-level rollback (FAQ) Тоже наткнулся на эту ссылку, когда искал, что дать топикстартеру. Но счел ее не столь убедительной, statement-level rollback он конечно statement-level, но из приведенной статьи я бы не смог сделать однозначного вывода, что это распространяется и на весь pl/sql блок целиком, а не sql-команды в нем по отдельности.
...
Рейтинг: 0 / 0
16.02.2017, 17:05
    #39405963
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
AmKadя бы не смог сделать однозначного вывода, что это распространяется и на весь pl/sql блок целиком, а не sql-команды в нем по отдельности.Не спорю, не разжёвано. Но разве AB - это не statement?
statement-level rollback относится к любому server-call-у. Если грубо - любой execute: из хост-программы, а внутри PL/SQL - все связанное с SQL% (DML, for update, commit, EI), dbms_sql.
...
Рейтинг: 0 / 0
16.02.2017, 17:07
    #39405966
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
И да, ничто так не подтверждает правило, как исключения. Есть exception, который не выполняет statement-level rollback.
...
Рейтинг: 0 / 0
16.02.2017, 17:22
    #39405979
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
ElicНо разве AB - это не statement?
statement-level rollback относится к любому server-call-у.Так-то оно так. Но когда понимаешь, что внутри AB-statement-a есть другие SQL-statement-ы, а такие выражения, как server-call и pl/sql-блок в статье опущены, невольно задаешься вопросом, как эти правила выполняются для AB-блока. Другое же дело - когда знаешь, как это работает, то и статью уже воспринимаешь под соответствующим углом.

ElicЕсть exception, который не выполняет statement-level rollbackСходу сейчас не угадаю. Какой?
...
Рейтинг: 0 / 0
16.02.2017, 17:43
    #39406007
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
AmKadневольно задаешься вопросом, как эти правила выполняются для AB-блока.

Откаты statement-ов раскручиваются пока им не встретится обработчик соответствующего
исключения. По-моему, вполне очевидно, что любое исключение обязано быть хоть как-то
обработано на уровне пользовательского кода, оно не может просто исчезнуть в воздухе.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.02.2017, 17:49
    #39406017
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
Dimitry Sibiryakov,
" оно не может просто исчезнуть в воздухе" - NO_DATA_FOUND внутри pipelined функций)
...
Рейтинг: 0 / 0
16.02.2017, 17:52
    #39406023
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
AmKadчто внутри AB-statement-a есть другие SQL-statement-ы,А также наоборот, о чём даже написано в документации.
AmKadСходу сейчас не угадаю. Какой?Hint: array
...
Рейтинг: 0 / 0
16.02.2017, 17:53
    #39406025
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
VintNO_DATA_FOUND внутри pipelined функций)
...
Рейтинг: 0 / 0
16.02.2017, 17:56
    #39406030
Dimitry Sibiryakov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
VintNO_DATA_FOUND внутри pipelined функций)
А оно там возникает именно как исключение, а не просто состояние NO_MORE_DATА у выходного
курсора?..
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
16.02.2017, 18:01
    #39406033
AmKad
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
Dimitry SibiryakovAmKadневольно задаешься вопросом, как эти правила выполняются для AB-блока.

Откаты statement-ов раскручиваются пока им не встретится обработчик соответствующего
исключения. По-моему, вполне очевидно, что любое исключение обязано быть хоть как-то
обработано на уровне пользовательского кода, оно не может просто исчезнуть в воздухе.
Очевидно, когда знаешь, опробовал на реальных примерах и опыте. А выстроить у себя в голове понимание работы pl/sql блоков, связь statement-level rollback и exception (+ вложенности) внутри них по результатам только этой статьи интуиции мне бы не хватило.
...
Рейтинг: 0 / 0
16.02.2017, 18:20
    #39406052
ln123
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
С NO_DATA_FOUND в Oracle вообще не все хорошо

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
create or replace function test1_b return number
is
 nv number;
begin
 -- raise_application_error(-20000,'Error');
  select 1 into nv from dual where 1=2;
  return nv;
end;



Код: plsql
1.
2.
3.
4.
5.
declare
 nv number;
begin
 nv := test1_b;
end;



Получим Exception, но в тоже время

Код: plsql
1.
select test1_b c from all_objects



Нормально отработает без Exception.
Но хорошо что хоть отработает, а так на какой-то версии если в запросе была функция которая генерировала no_data_found то можно было потом долго удивляться как запрос без условий возвращал меньше строк чем есть в таблице :)
...
Рейтинг: 0 / 0
16.02.2017, 18:26
    #39406063
Vint
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
Dimitry Sibiryakov,

к сожалению, глотнет даже если руками рейзнуть, и иногда это больно
Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
CREATE OR REPLACE FUNCTION f_pipe(n NUMBER) RETURN sys.odcinumberlist
  PIPELINED IS
  fn_test NUMBER;
BEGIN
  FOR pcur_test IN 1 .. n LOOP
    IF pcur_test > 1 THEN
      SELECT 1 INTO fn_test FROM dual WHERE 1 = 2;
    END IF;
    PIPE ROW(pcur_test);
  END LOOP;
END;

SELECT * FROM TABLE(f_pipe(5))

drop FUNCTION f_pipe;


...
Рейтинг: 0 / 0
17.02.2017, 13:16
    #39406531
Elic
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Неявный откат транзакции для анонимного блока
ElicAmKadСходу сейчас не угадаю. Какой?Hint: array
Код: 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.
SQL> create table plch_tab(n int);

Table created.

Elapsed: 00:00:00.02
SQL> select * from plch_tab;

no rows selected

Elapsed: 00:00:00.00
SQL> declare e exception; pragma exception_init(e,-24381);
  2  begin insert into plch_tab values(0); raise e; end;
  3  /
ERROR:
ORA-24381: error(s) in array DML
ORA-06512: at line 2


Elapsed: 00:00:00.04
SQL> select * from plch_tab;

         N
----------
         0

1 row selected.

Elapsed: 00:00:00.00
SQL> drop table plch_tab purge;

Table dropped.

...
Рейтинг: 0 / 0
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Неявный откат транзакции для анонимного блока / 17 сообщений из 17, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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