4
データベーススキーマを定期的に更新するプログラムがあります。時々、DDLステートメントの1つが失敗する可能性があります。もしそうであれば、すべての変更をロールバックします。私はそうのようなトランザクションで更新をラップ:私たちが実行しているとおりトランザクションでのOracleスキーマ更新のラップ
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;
、ステートメントのいずれかが失敗した場合、私が代わりにCOMMITのROLLBACKを実行します。これはSQL Server上でうまく動作しますが、Oracleには必要な効果はありません。
- http://www.orafaq.com/wiki/SQL_FAQ#What_are_the_difference_between_DDL.2C_DML_and_DCL_commands.3F
- http://infolab.stanford.edu/~ullman/fcdb/oracle/or-nonstandard.html#transactions
が、これは、暗黙的なコミットをオフにする任意の方法あります:Oracleは、暗黙的には、各DDL文の後にCOMMITを行うように見えますか?
Oracleは、各DDL文の前と後ろにCOMMITを発行します。 – APC