Вот пример использования AUTONOMOUS_TRANSACTION
drop table EX_EMPLOYEE
/
drop table EX_EMPLOYEE1
/
create table EX_EMPLOYEE
(id number(4) null)
/
create table EX_EMPLOYEE1
(id number(4) null)
/
insert into EX_EMPLOYEE (id) values(1);
/
insert into EX_EMPLOYEE1 (id) values(1);
/
commit
/
create or replace procedure P_TEST
as
begin
DELETE FROM EX_EMPLOYEE WHERE ID =1;
P_TEST1();
end;
/
create or replace procedure P_TEST1
as
PRAGMA AUTONOMOUS_TRANSACTION;
begin
DELETE FROM EX_EMPLOYEE1 WHERE ID =1;
commit;
end;
/
, затем выполните процедуру
begin
P_TEST();
end;
/
, когда завершите выбор на 2 таблицах, вы заметите, что первая таблица все еще содержитстрока, однако вторая строка удаляется.
select * from ex_employee where id =1;
select * from ex_employee1 where id =1;
Вы также можете проверить из базы данных, что таблица все еще заблокирована:
SELECT * FROM V$LOCKED_OBJECT L
INNER JOIN USER_OBJECTS U ON(L.OBJECT_ID=U.OBJECT_ID);
Не забудьте после этого тестасовершить или откатить, чтобы снять блокировку.