У меня есть несколько SQL-файлы, которые выполняются один за другим в сценарии, как это:Oracle. Как реализовать вложенные транзакции
@script-A.sql;
@script-B.sql;
@script-C.sql;
...
каждый файл сценария делает что-то Usefull и выглядит следующим образом:
DECLARE
...
BEGIN
EXECUTE IMMEDIATE 'TRUNCATE SOME-TABLE';
-- lots of inserts into SOME_TABLE
COMMIT;
END;
/
Я должен обернуть выполнение файлов sql в одной большой транзакции. Если выполнение любого файла sql не выполняется, все предыдущие изменения файла sql должны быть отменены.
Как это сделать?
p.s
, как @Mat заметили изменения DDL (усечение таблицы) не может быть rollbacked. Я могу реорганизовать эту строку кода, если это необходимо.
Вы не можете откатить DDL (усечения является DDL), так что ... – Mat
@Mat всё изменится, если я реорганизовать «усечение» в «исключить из»? – user149691
Да, удалить DML, и вы можете откатиться от него. – sagi