2011-02-09 13 views
1

私はトランザクションがDBでどのように機能するかを学び、これを行うには、私が書いた次のテストSQLしようとしています:1行がテーブルに追加され、このコードの実行後DB2上で現在の分離レベルを取得する方法は?

SAVEPOINT STOP_HERE ON ROLLBACK RETAIN CURSORS; 

INSERT INTO TESTSCHEMA."test" (ID, NAME) VALUES (89898, 'SDFASDFASD'); 

ROLLBACK TO SAVEPOINT STOP_HERE; 

SELECT * FROM TESTSCHEMA."test"; 

。しかし、私は先頭に以下の行を追加する場合:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED; 

私は予想通り、すなわち、トランザクションが正常にロールバックされていないと、DBには新しいエントリが、私はこのコードを実行する場合は、再度Data Studioのは私の誤りでを示しているすべての作業最初の行:

[SQL0428] SQL statement can not be launched. 

だから私の質問は以下のとおりです。 は、現在の分離レベルを取得するために、なぜ私は1時間より分離レベルの詳細を設定することはできませんが道ますか?

私はすべての答えとリンクのために非常に感謝するでしょう。

PS。私はDB2/iSeries V5R4を使用しています。

PPS。申し訳ありませんが私の悪い英語

+0

は、あなたのセットの各ステートメントの後のCOMMITのSQLをやっていますか? –

+0

いいえ、私はあなたのドライバーのために質問 –

+0

の体内に掲載ちょうどSQL、してみてください[getDefaultTransactionIsolation()](http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzahh %2Fjavadoc%2Fcom%2Fibm%2Fas400%2Faccess%2FAS400JDBCDatabaseMetaData.html)。私は、DB2のhttp://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jspあなたは現在の分離レベルを取得する別の方法ですか私のバージョンに特殊レジスタCURRENT ISOLATIONを持っていない – user2338816

答えて

1

のためにあなたは、おそらく特殊レジスタcurrent isolationから現在の分離レベルを取得することができます。隔離レベルを設定する前にCOMMITまたはROLLBACKを実行しておらず、そのセッションで処理中のトランザクションがまだ残っていたので、SQL0428が表示されます。

+0

? –

+0

@Andriy Petrivskyy私はそこにいるとは思わない...ほとんどの場合、あなたのためにそれらのことを追跡するアプリケーションサーバとフレームワークを使用することになるでしょう... – erloewe

+0

あなたは正しいです。私が使用する必要がドライバー(http://publib.boulder.ibm.com/infocenter/iseries/v5r4/index.jsp?topic=%2Frzahh%2Fjavadoc%2Fcom%2Fibm%2Fas400%2Faccess%2Fdoc-files%2FJDBCProperties。 HTML)本当に分離レベルを設定するオプションがあります。ありがとうございました。 –

関連する問題