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
6
A
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
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.
Problemi correlati
- 1. connettersi in Oracle SQL
- 2. Oracle SQL vs Oracle PL/SQL
- 3. O stenografia in Oracle SQL?
- 4. Per ciclo in Oracle SQL
- 5. Supporto Bool Oracle SQL
- 6. Registrazione query SQL Oracle
- 7. Intervallo di date in PL/SQL (Oracle)
- 8. MAX (DATA) - SQL ORACLE
- 9. Oracle SQL select distinct
- 10. Aggiungi giorni Oracle SQL
- 11. Perché dovresti usare il database Oracle?
- 12. Come usare sql "mi piace" in PyMongo?
- 13. come usare sql vecchio stile in mvc4
- 14. Come usare variabile stringa in SQL
- 15. Come posso monitorare l'attività SQL su Oracle?
- 16. if-elseif-else 'condizione' in Oracle SQL
- 17. Aggiornamento SQL con due tavoli in Oracle
- 18. Sequenza Oracle, ma in MS SQL Server
- 19. Importare il file .sql in Oracle?
- 20. Variabili di tabella in Oracle PL/SQL?
- 21. INFERIORE O UGUALE A in Oracle SQL
- 22. Oracle SQL utilizzando come un jolly
- 23. SQL Server: RowVersion equivalente in Oracle
- 24. oracle SQL più come terminare il comando nel file SQL?
- 25. Ordine personalizzato in Oracle PL/SQL
- 26. sql server GO equivalente in oracle
- 27. Date di calcolo in oracle sql
- 28. `show create table` equivalent in oracle sql
- 29. Trova intervallo corrispondente in SQL - Oracle
- 30. Generazione di sql insert in per Oracle
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
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. –
È 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. –