2010-11-04 17 views

risposta

27

Non esiste un meccanismo di attivazione ON COMMIT in Oracle. Ci sono soluzioni alternative comunque:

  1. Si potrebbe utilizzare una vista materializzata con REFRESH ON COMMIT e aggiungere trigger per questo MV. Ciò consentirebbe di attivare la logica quando una tabella di base è stata modificata al momento del commit. Se il trigger genera un errore, la transazione verrà annullata (perderai tutte le modifiche non modificate).

  2. È possibile utilizzare DBMS_JOB per rinviare un'azione dopo il commit. Questa sarebbe un'azione asincrona e potrebbe essere desiderabile in alcuni casi (ad esempio quando si desidera inviare un'e-mail dopo che la transazione ha avuto esito positivo). Se si ripristina la transazione principale, il lavoro verrà annullato. Il lavoro e la sessione principale sono indipendenti: se il lavoro fallisce, la transazione principale non verrà ripristinata.

Nel tuo caso, probabilmente potresti usare l'opzione (1). Personalmente non mi piace codificare la logica di business nei trigger poiché aggiunge molta complessità, ma tecnicamente penso che sarebbe fattibile.

+0

Grazie. L'opzione n. 1 è conveniente per il mio caso. –

0

Ho avuto un problema simile, ma l'opzione 1 non è stata purtroppo comoda per il mio caso.

Un'altra possibile soluzione, suggerita anche da "Chiedi a Tom", consiste nel specificare una stored procedure e chiamare semplicemente tale procedura prima di eseguire COMMIT. Questa soluzione è utile solo se si ha accesso al codice che esegue COMMIT, ma nel mio caso questa era la soluzione più semplice.

Problemi correlati