He estado tratando de resolver esto por un tiempo y creo que es hora de pedir ayuda. Estoy construyendo una secuencia de comandos de suministro de esquemas y quiero agregar algunas secuencias de comandos de salida y manejo de errores. La idea es que la ventana de salida del script solo me muestre los mensajes clave sin todo el ruido.Error al manejar en una secuencia de comandos de Oracle
Create Temporary Error Table
Begin Transaction
-- begin work block
Print "Doing some types of work"
-- do work here
If Error and Active Transactions > 0 Then Rollback
If Active Transactions = 0 Then Insert Error In Temp Error Table and Start Another Transaction
-- end work block
-- once all all work complete
If Active Transactions > 0 Then Commit Transactions
En el mundo de SQL Server que podría tan sólo hacer esto con Red Gate's SQL Packager, que ha descubierto que (pista, pista Red Gate - necesitamos una versión de Oracle :)). ¿Alguna idea de dónde comenzar con Oracle para obtener algo similar?
_Estoy creando un script de aprovisionamiento de esquema_ Si quiere decir que está creando/alterando tablas y cosas así; la reversión no ayudará. Dentro de Oracle, un comando DDL confirma que la transacción actual, si hay una pendiente, se ejecuta dentro de una transacción y se compromete con éxito, recupera la falla. Por lo tanto, después de ejecutar un comando DDL no habrá ninguna transacción pendiente.La única excepción es si hay un error de análisis, entonces el DB no sabe que se suponía que debía ejecutar un comando DDL, y no haría el primer compromiso implícito, ni iniciaría una transacción para el DDL. Esto es muy diferente de SQL Server. –
Mi comentario no proporciona una respuesta, solo está ahí para señalar una trampa de la que usted puede o no haber tenido conocimiento. –
@Shannon - Gracias, realmente apesta que no se pueda hacer una transacción de alcance más amplio que incluya DDL. Realmente hace que el manejo de errores sea mucho más difícil en el proceso de aprovisionamiento al dejar la base de datos en un estado medio vacío si algo sale mal. –