Я хочу знать, если объявление AUTONOMOUS_TRANSACTION
означает, что действие правила начинается после завершения транзакции события INSERT on tab
(транзакция с активацией AKA имела успешный COMMIT
).Триггер с автономной транзакцией
Я использую Oracle DB 11,2
Здесь я добавил триггер:
CREATE OR REPLACE TRIGGER rule1
AFTER INSERT ON tab
FOR EACH ROW
DECLARE
PRAGMA AUTONOMOUS_TRANSACTION;
BEGIN
EXECUTE IMMEDIATE ('
ALTER TABLE vert_strukt
ADD '||:NEW.name||' VARCHAR2(40) ');
INSERT INTO resulted (name_unique)
VALUES (:NEW.name);
COMMIT;
END;
Хотя есть многочисленные вопросы, которые я мог бы задать о том, что вы здесь делаете, простой ответ на поставленный вопрос заключается в том, что AUTONOMOUS_TRANSACTION не имеет никакого отношения к времени. Как указано на [этой странице] (http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/autonotransaction_pragma.htm), она позволяет выполнять отдельную транзакцию, которая может совершать или откатываться, не влияя на внешнюю транзакцию. –
запуск DDL в триггере не похоже на то, что вы действительно должны делать в первую очередь. – OldProgrammer
@HepC Спасибо за объяснение. – eggnukes