2010-10-11 23 views
6

Sto tentando di utilizzare la funzionalità di transazione in Oracle SQL per la prima volta e non riesco a trovare una buona spiegazione. Capisco che l'avvio di una nuova sessione inizierà una nuova transazione. Capisco anche che commit/rollback è usato per terminarlo. Quello che sto cercando di fare è eseguire due istruzioni e, se fallisco, annulla qualsiasi modifica che potrebbero aver fatto e continua con l'esecuzione. Come posso verificare questa condizione ed emettere un commit o rollback di conseguenza?Come usare Rollback/Commit in Oracle SQL

risposta

15

Utilizzare un blocco PL/SQL e scrivere qualcosa del genere:

begin 

    statement_zero; 

    savepoint my_savepoint; 

    begin 
    -- if either of these fail, then exception section will be executed 
    statement_one; 
    statement_two; 
    exception 
    when others then 
     rollback to my_savepoint; 
    end; 

    statement_three; 

    commit; 

end; 

Vedi anche http://www.adp-gmbh.ch/ora/concepts/transaction.html

+0

Ah ok, grazie, esaminando i blocchi un po 'più ho scoperto un altro problema specifico per quello che sto cercando di fare. Sto cercando di aggiungere una colonna a una tabella, impostare i valori predefiniti di tutte le voci correnti e impostare un trigger per aggiornare questo valore secondo necessità. I blocchi consentono solo SELECT, INSERT, UPDATE, DELETE. Qualche idea per il confezionamento di questo in una transazione? – dpsthree

+5

Le istruzioni DDL (CREATE, ALTER, DROP, ecc.) COMMITONO implicitamente prima e dopo l'esecuzione. Pertanto, le azioni a cui si fa riferimento non possono essere eseguite in un'unica transazione e non possono essere ripristinate. –

+0

È possibile, a proposito, eseguire istruzioni DDL all'interno di un blocco PL/SQL utilizzando SQL dinamico, ad es. 'ESEGUI IMMEDIATO' ALTER TABLE per aggiungere x NUMERO''. Ma questo non cambia il fatto che l'istruzione DDL esegue un COMMIT prima e dopo l'aggiornamento del dizionario dei dati. –

2

Insieme con un bel exaplample Obi-Wan Kenobi provded una spiegazione dettagliata delle transazioni Oracle può essere trovato alla Chapter 4 di Oracle Guida ai concetti (il link che ho fornito va per 10.2, puoi trovare il documento adatto alla tua versione anche sul sito Oracle). Ti suggerisco di leggere questo capitolo per capire in che modo Oracle gestisce la gestione delle transazioni e il documento nel suo complesso è una buona informazione per capire come funziona il DB Oracle.