2009-07-09 15 views
5

Il trigger successivo all'aggiornamento si avvia in caso di rollback?ORACLE Rollback e trigger

Scenario: diciamo che aggiorniamo una tabella A e che il trigger sulla tabella A prende il via e aggiorna un'altra tabella B con i dettagli. Se viene eseguito un rollback sulla tabella A a causa di un errore di elaborazione, il trigger causerà alla tabella B il rollback della modifica?

risposta

9

Sì, lo sarà.

Trigger lavorano in ambito di transazione del comunicato DML (sia iniziata da voi in modo esplicito o la dichiarazione DML sé implicitamente)

Quando questa transazione viene annullata, tutte le modifiche apportate dai trigger sono anche il rollback.

Tuttavia, se si mette

PRAGMA autonomous_transaction 

nella definizione di trigger, il trigger inizierà la propria operazione che si dovrebbe impegnarsi prima che il grilletto viene completata.

+1

Quindi la transazione autonoma è buona se si desidera registrare tutti i ATTEMPTS per eseguire un aggiornamento (anche se falliscono o vengono ripristinati), ma BAD se si desidera eseguire l'azione innescata solo quando gli aggiornamenti di attivazione hanno esito positivo e vengono confermati. Attenzione! –

+1

È necessario COMMIT esplicito per le transazioni autonome. Se non lo fai, fallirà con "ORA-06519: transazione autonoma attiva rilevata e ripristinata" – jva

+0

@jva: hai ragione, aggiustando. – Quassnoi

3

Solo una nota: se si definisce trigger di livello di istruzione AFTER UPDATE (senza clausola FOR EACH ROW) non si attiva se l'istruzione DML sulla tabella fallisce e viene ripristinata.