我正在尝试了解事务如何在数据库中工作,为此我编写了以下测试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;
按预期工作,即事务正确回滚,DB中没有新条目,但如果我再次运行此代码,Data Studio会在第一行显示错误:
[SQL0428] SQL statement can not be launched.
所以我的问题是: 有没有办法获得当前的隔离级别以及为什么我不能将隔离级别设置超过1次?
我非常感谢所有答案和链接。
PS。我正在使用DB2 / iSeries V5R4。
PPS。抱歉我的英文不好
答案 0 :(得分:1)
您可以从特殊寄存器current isolation获取当前隔离级别。您得到SQL0428,因为在设置隔离级别之前没有COMMIT或ROLLBACK,并且该会话中仍有进行处理的事务。