Транзакции

mmary
Дата: 17.09.2004 11:47:01
Каким образом мне обрабатывать транзакции.
например

происходит вставка данных (несколькими порциями) и из-за наличия в таблицы unique key вываливается исключение, каким обзазом отловить это исключение и откатить весь набор данных вставленный за одну транзакцию
или если исключения не было, то закоммитить транзакцию
Vadim_Maximov
Дата: 17.09.2004 11:51:01
begin
  insert into T(ID) values(1);
  insert into T(ID) values(2);
  insert into T(ID) values(3);
  insert into T(ID) values(1); -- возникает нарушение уникальности
exception
  when Others then
     RollbacK;
     Raise;
end;
Вячеслав Любомудров
Дата: 17.09.2004 11:51:50
begin
insert into t values(1, 2, 3, 4);
insert into t values(1, 2, 3, 4);
commit;
exception when others then
rollback;
end;
Elic
Дата: 17.09.2004 12:37:08
mmary
происходит вставка данных (несколькими порциями) и из-за unique key вываливается исключение, как откатить весь набор данных вставленный за одну транзакцию
или если исключения не было, то закоммитить транзакцию
Если есть возможность поместить все вставки в один анонимный PL/SQL блок, то именно этого и будет достаточно.
begin
  insert ...
  ...
  insert ...
  commit;
end;
Если какой-нибудь из insert-ов окажется неудачным, автоматически будут отменены все изменения, выполненные в этом блоке. 2Vadim_Maximov & Вячеслав Любомудров - :)
Vadim_Maximov
Дата: 17.09.2004 12:39:00
2Elic: Но более правильным тоном будет все-таки явно указать rollback.
:)
Вячеслав Любомудров
Дата: 17.09.2004 12:54:33
Elic

Если какой-нибудь из insert-ов окажется неудачным, автоматически будут отменены все изменения, выполненные в этом блоке.
tst> create table t8(x number);

Table created.

tst> alter table t8 add constraint t8_uq unique(x);

Table altered.

tst> begin
  2  insert into t8 values(1);
  3  insert into t8 values(1);
  4  commit;
  5  exception when others then null;
  6  end;
  7  /

PL/SQL procedure successfully completed.

tst> select * from t8;

         X
----------
         1
Elic
Дата: 17.09.2004 13:03:39
Вячеслав Любомудров
Elic
Если какой-нибудь из insert-ов окажется неудачным, автоматически будут отменены все изменения, выполненные в этом блоке.
  5  exception when others then null;
  6  end;
У меня "зарывания головы в песок" не было :)
Вячеслав Любомудров
Дата: 17.09.2004 13:17:01
Упс, слишком много думал