Embrulhe uma atualização de esquema Oracle em uma transação

Eu tenho um programa que atualiza periodicamente o esquema do banco de dados. Às vezes, uma das instruções DDL pode falhar e, se ocorrer, desejo reverter todas as alterações. Envolvo a atualização em uma transação da seguinte forma:

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;

Como estamos executando, se uma das instruções falhar, eu faço um ROLLBACK em vez de um COMMIT. Isso funciona muito bem no SQL Server, mas não tem o efeito desejado no Oracle. O Oracle parece executar um COMMIT implícito após cada instrução 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

Existequalque maneira de desativar esse commit implícit

questionAnswers(1)

yourAnswerToTheQuestion