Как получить текущий уровень изоляции в DB2? - PullRequest
2 голосов
/ 09 февраля 2011

Я пытаюсь узнать, как транзакции работают в БД, и для этого я написал следующий тест 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";

После выполнения этого кода одна строка добавляется в таблицу. Но если я добавлю следующую строку в начале:

SET TRANSACTION ISOLATION LEVEL READ COMMITTED;

все работает, как я и ожидал, т.е. транзакция корректно откатывается и новых записей в БД нет, но если я снова запускаю этот код, Data Studio выдает ошибку в первой строке:

[SQL0428] SQL statement can not be launched.

Итак, мои вопросы: Есть ли способ получить текущий уровень изоляции и почему я не могу установить уровень изоляции более 1 раза?

Буду очень благодарен за все ответы и ссылки.

PS. Я использую DB2 / iSeries V5R4.

PPS. Извините за мой плохой английский

1 Ответ

1 голос
/ 09 февраля 2011

Возможно, текущий уровень изоляции можно получить из специального регистра текущая изоляция .Вы получаете SQL0428 , потому что вы не указали COMMIT или ROLLBACK до установки уровня изоляции, и в этом сеансе все еще выполнялись транзакции.

...