Envolver una actualización de esquema de Oracle en una transacción

Tengo un programa que actualiza periódicamente su esquema de base de datos. A veces, una de las declaraciones DDL puede fallar y, si lo hace, quiero revertir todos los cambios. Envuelvo la actualización en una transacción así:

BEGIN TRAN;

CREATE TABLE A (PKey int NOT NULL IDENTITY, NewFieldKey int NULL, CONSTRAINT PK_A PRIMARY KEY (PKey));
CREATE INDEX A_2 ON A (NewFieldKey);
CREATE TABLE B (PKey int NOT NULL IDENTITY, CONSTRAINT PK_B PRIMARY KEY (PKey));
ALTER TABLE A ADD CONSTRAINT FK_B_A FOREIGN KEY (NewFieldKey) REFERENCES B (PKey);

COMMIT TRAN;

Mientras estamos ejecutando, si una de las declaraciones falla, hago un ROLLBACK en lugar de un COMMIT. Esto funciona muy bien en SQL Server, pero no tiene el efecto deseado en Oracle. Oracle parece hacer un COMPROMISO implícito después de cada declaración DDL:

http: //www.orafaq.com/wiki/SQL_FAQ#What_are_the_difference_between_DDL.2C_DML_and_DCL_commands.3http: //infolab.stanford.edu/~ullman/fcdb/oracle/or-nonstandard.html#transaction

Esta ahíningun forma de desactivar esta confirmación implícita?

Respuestas a la pregunta(1)

Su respuesta a la pregunta