Estoy tratando de utilizar la funcionalidad de transacción en Oracle SQL por primera vez y parece que no puedo encontrar una buena explicación. Entiendo que comenzar una nueva sesión comenzará una nueva transacción. También entiendo que commit/rollback se usa para finalizarlo. Lo que intento hacer es ejecutar dos declaraciones y si alguna de ellas falla, deshacer los cambios que puedan haber hecho y continuar con la ejecución. ¿Cómo puedo verificar esta condición y emitir un compromiso o reversión en consecuencia?Cómo usar Rollback/Commit en Oracle SQL
6
A
Respuesta
15
Utilice un bloque PL/SQL y escribir algo como esto:
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;
Véase también http://www.adp-gmbh.ch/ora/concepts/transaction.html
2
Junto con un buen exaplample Obi-Wan Kenobi provded una explicación detallada de las transacciones de Oracle se puede encontrar en Chapter 4 de Oracle Guía de conceptos (el enlace que proporcioné va para 10.2, también puede encontrar el documento adecuado para su versión en el sitio web de Oracle). Le sugiero que lea este capítulo para comprender cómo maneja Oracle la gestión de transacciones, y el documento en su conjunto es una muy buena información para comprender cómo funciona Oracle DB.
Cuestiones relacionadas
- 1. ¿Cómo usar enumeraciones en Oracle?
- 2. Usar tnsnames.ora en Oracle SQL Developer
- 3. Cómo usar variables en Oracle PL/SQL donde la cláusula
- 4. cómo usar xmltable en Oracle?
- 5. Connect en Oracle SQL
- 6. Oracle: ¿Cómo convierto hexadecimal a decimal en Oracle SQL?
- 7. Generar inserción sql en Oracle
- 8. ¿Qué hace (+) en Oracle SQL?
- 9. ¿Cómo usar tablas LookUp en Oracle?
- 10. USE DATABASE en SQL PLUS ORACLE 11gr1
- 11. oracle pl/sql arrays
- 12. Oracle SQL Query logging
- 13. MAX (FECHA) - SQL ORACLE
- 14. ORACLE SQL listagg function
- 15. Cómo dividir sentencias Oracle sql para ADO.NET
- 16. ¿Cómo edito BLOB (que contiene JSON) en Oracle SQL Developer?
- 17. Cómo exportar datos con Oracle SQL Developer?
- 18. Cómo usar Wordnet en SQL
- 19. ¿Cómo identificar SQL de alta carga en Oracle, usando vistas de Oracle?
- 20. Cómo usar una matriz asociativa de Oracle en una consulta SQL
- 21. Error en Oracle al usar DBLINK
- 22. Insertar valores en tablas Oracle SQL
- 23. Variables de tabla en Oracle PL/SQL?
- 24. Eliminar con "Unir" en Oracle sql Query
- 25. Usando LINQ to SQL con Oracle
- 26. Oracle sql developer color coding
- 27. Oracle SQL Developer y PostgreSQL
- 28. Oracle SQL Developer Environment codificación
- 29. Oracle PL/SQL UTL_FILE.PUT buffering
- 30. Orden personalizado en Oracle PL/SQL
Ah ok, gracias, mirando en los bloques un poco más descubrí otro problema específico de lo que estoy tratando de hacer. Estoy intentando agregar una columna a una tabla, establecer los valores predeterminados de todas las entradas actuales y establecer un activador para actualizar este valor según sea necesario. Los bloques solo permiten SELECCIONAR, INSERTAR, ACTUALIZAR, ELIMINAR. ¿Alguna idea para envolver esto en una transacción? – dpsthree
Las sentencias DDL (CREAR, ALTERAR, CAÍDA, etc.) implícitamente COMPRAR antes y después de la ejecución. Por lo tanto, las acciones a las que se refiere no se pueden realizar en una sola transacción y no se pueden revertir. –
Puede, por cierto, ejecutar sentencias DDL dentro de un bloque PL/SQL usando SQL dinámico, p. Ej. 'EJECUTAR INMEDIATE 'ALTER TABLE foo ADD x NUMBER''. Pero esto no cambia el hecho de que la instrucción DDL hace un COMPROMISO antes y después de actualizar el diccionario de datos. –