powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Неявный откат транзакции для анонимного блока
17 сообщений из 17, страница 1 из 1
Неявный откат транзакции для анонимного блока
    #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
Неявный откат транзакции для анонимного блока
    #39405870
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Блок, в котором возникло исключение, откатывается целиком.
...
Рейтинг: 0 / 0
Неявный откат транзакции для анонимного блока
    #39405893
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadБлок, в котором возникло исключение, откатывается целиком.Слишком упрощённо, поэтому технически неправильно.
...
Рейтинг: 0 / 0
Неявный откат транзакции для анонимного блока
    #39405915
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Guest_rollback_123и все, без отката самой вставки.RTFM statement-level rollback (FAQ)
...
Рейтинг: 0 / 0
Неявный откат транзакции для анонимного блока
    #39405939
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ElicGuest_rollback_123и все, без отката самой вставки.RTFM statement-level rollback (FAQ) Тоже наткнулся на эту ссылку, когда искал, что дать топикстартеру. Но счел ее не столь убедительной, statement-level rollback он конечно statement-level, но из приведенной статьи я бы не смог сделать однозначного вывода, что это распространяется и на весь pl/sql блок целиком, а не sql-команды в нем по отдельности.
...
Рейтинг: 0 / 0
Неявный откат транзакции для анонимного блока
    #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
Неявный откат транзакции для анонимного блока
    #39405966
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
И да, ничто так не подтверждает правило, как исключения. Есть exception, который не выполняет statement-level rollback.
...
Рейтинг: 0 / 0
Неявный откат транзакции для анонимного блока
    #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
Неявный откат транзакции для анонимного блока
    #39406007
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKadневольно задаешься вопросом, как эти правила выполняются для AB-блока.

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

Откаты statement-ов раскручиваются пока им не встретится обработчик соответствующего
исключения. По-моему, вполне очевидно, что любое исключение обязано быть хоть как-то
обработано на уровне пользовательского кода, оно не может просто исчезнуть в воздухе.
Очевидно, когда знаешь, опробовал на реальных примерах и опыте. А выстроить у себя в голове понимание работы pl/sql блоков, связь statement-level rollback и exception (+ вложенности) внутри них по результатам только этой статьи интуиции мне бы не хватило.
...
Рейтинг: 0 / 0
Неявный откат транзакции для анонимного блока
    #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
Неявный откат транзакции для анонимного блока
    #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
Неявный откат транзакции для анонимного блока
    #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
17 сообщений из 17, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Неявный откат транзакции для анонимного блока
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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