2

DBでトランザクションがどのように機能するかを学習しようとしています。これを行うために、次のテストSQLを作成しました。

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";

このコードの実行後、1行がテーブルに追加されます。しかし、最初に次の行を追加すると、次のようになります。

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

すべてが期待どおりに機能します。つまり、トランザクションは正しくロールバックされ、DBに新しいエントリはありませんが、このコードを再度実行すると、DataStudioの最初の行にエラーが表示されます。

[SQL0428] SQL statement can not be launched.

したがって、私の質問は次のとおりです。現在の分離レベルを取得する方法はありますか。また、分離レベルを1回以上設定できないのはなぜですか。

私はすべての答えとリンクに非常に感謝します。

PS。DB2 /iSeriesV5R4を使用しています。

PPS。私の悪い英語でごめんなさい

4

1 に答える 1

1

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

于 2011-02-09T19:54:45.680 に答える