2015-05-24 3 views
1

Я хочу знать, если объявление 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; 
+1

Хотя есть многочисленные вопросы, которые я мог бы задать о том, что вы здесь делаете, простой ответ на поставленный вопрос заключается в том, что AUTONOMOUS_TRANSACTION не имеет никакого отношения к времени. Как указано на [этой странице] (http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/autonotransaction_pragma.htm), она позволяет выполнять отдельную транзакцию, которая может совершать или откатываться, не влияя на внешнюю транзакцию. –

+4

запуск DDL в триггере не похоже на то, что вы действительно должны делать в первую очередь. – OldProgrammer

+0

@HepC Спасибо за объяснение. – eggnukes

ответ

0

Я рекомендую вам использовать хранимую процедуру, чтобы сделать это. Кроме того, никакие операторы управления транзакциями не разрешены в триггере. ROLLBACK, COMMIT, и SAVEPOINT не может быть использован.

+0

Триггер работает нормально. Я просто попросил разъяснения для 'AUTONOMOUS_TRANSACTION' – eggnukes