Frage

Ich habe ein Programm bekommt, das in regelmäßigen Abständen sein Datenbank-Schema aktualisiert. Manchmal eine der DDL-Anweisungen kann fehlschlagen, und wenn ja, ich will alle Änderungen rückgängig zu machen. Ich wickle das Update in einer Transaktion wie folgt:

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;

Wie wir ausgeführt wird, wenn eine der Aussagen nicht, ich habe eine ROLLBACK statt COMMIT. Dies funktioniert gut auf SQL Server, haben aber nicht den gewünschten Effekt auf Oracle. Oracle scheint eine implizite COMMIT nach jeder DDL-Anweisung zu tun:

Gibt es jeder Art und Weise begehen diese implizite auszuschalten?

War es hilfreich?

Lösung

Sie können dies nicht ausschalten. Ziemlich einfach durch die Gestaltung Ihrer Skripte zu arbeiten um Tabellen im Fall fällt sie bereits vorhanden ist etc ...

Sie bei Verwendung RÜCKBLICK Datenbank aussehen können, ich glaube, Sie dies im Schema / Objektebene tun können, aber die Dokumentation prüfen, dass zu bestätigen. Sie müßten auf 10G sein, dass zu arbeiten.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top