2

背景: Oracle plsql のリファクタリングを行っています。私が達成したい最初の考えは、主成分の単体テストを行うことです。

このために、私はgem plsq-specでルビーを使用しています https://github.com/rsim/ruby-plsql-spec

テストを数回実行するために、データベース接続を開いた後にOracleセーブポイントを使用し、接続を閉じる前にセーブポイントにロールバックしています

問題: 一部のプロシージャに内部コミットがあったため、一部のテストを複数回実行できません。

内部コミット/ロールバックが発生した場合にセーブポイントを保持するには、Oracle で何ができますか?

この情報がノートにあると、どうやら私が望むことは不可能です http://docs.oracle.com/cd/B19306_01/appdev.102/b14261/savepoint_statement.htm

単純なロールバックまたはコミットにより、すべてのセーブポイントが消去されます。セーブポイントにロールバックすると、そのセーブポイントより後にマークされたセーブポイントはすべて消去されます。ロールバックしたセーブポイントは残ります。

だから、唯一の解決策は?:

  • 手順を変更する
  • テストを実行する前にすべてのデータを消去しますか?

tks

4

1 に答える 1

4

ここでは、データベースまたは個々のテーブルを以前の時点の状態に復元できるため、フラッシュバック機能が役立ちます。

http://docs.oracle.com/cd/B28359_01/server.111/b28286/statements_9012.htm

于 2012-11-06T17:07:13.180 に答える