質問:Oracle DBでDDL文の自動コミットを無効にする方法はありますか?フライウェイを使用してddlをoracleでロールバックする
コンテキスト: 私はFlyway 4を使用してOracle DBの状態を維持しています。 faq pageのように、DDLはこのDBに自動コミットされるため、OracleではDDLの変更をロールバックできません。
たとえば、テーブルから別のテーブルにカラムを移動しています(既存の値をコピーしています)。だから、私は同じSQLファイルにALTER TABLE ADD、UPDATE、そしてALTER TABLE DROPを持っていたいと思います。 DROPステートメントでエラーが発生しましたが、最初のALTER TABLEによって追加された列はそのまま残りました。私もその変更をロールバックできるようにしたいと思います。
私が使用している1つの回避策は、DDL文ごとに個別のSQLファイルを追加することです。しかし、これは醜いです。これを行う他の方法?
誰かがあなたにdownvoteを与えた理由はわかりませんが、とにかくOracleエンジンはそのように動作します。すべてのDDLとDCLは自動的にコミットされます。これは、多くのOracleスクリプトでよく起こるエラーであり、偶然にもすべてのデータをコミットします。 –
シナリオでは、どのようなアクションをロールバックしたいのですか? – APC
質問を編集しました:ALTER TABLE DROPでエラーが発生した場合、新しい列が追加されたままになりました。私はそれらを削除したいと思います。可能であれば、多くのファイルとこれに取り組んでいる多くの同僚がいるため(各自のファイルにステートメントを追加することを忘れるかもしれない)、各SQLファイルでは行われないことがあります。 – GabiM