2010-10-11 56 views
6

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

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

+0

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

+5

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. –

+0

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. –

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.