尽管指定了读取提交的隔离级别,但存储过程会尝试读取未提交的数据

时间:2013-10-18 18:46:43

标签: stored-procedures db2 ibm-midrange db2-400

我有一个存储过程尝试读取未提交的数据,尽管指定了Read committed(* CS)的隔离级别。 以下是我的存储过程。

CREATE PROCEDURE SP_TEST_DATA_GET ( IN P_PROCESSNM VARCHAR(17) , 
                                    IN P_Status char(1))
RESULT SETS 1
LANGUAGE SQL
SET OPTION COMMIT=*CS


P1 : BEGIN

DECLARE CURSOR1 CURSOR WITH RETURN FOR
SELECT  DATA
FROM IAS_TEST_DATA
WHERE ( PROCESSNM IS NULL   OR  PROCESSNM = P_PROCESSNM )
AND Status=P_Status ;


OPEN CURSOR1 ;

END P1``

我使用的是Db2 v6 iseries。

如何避免读取未提交的数据,似乎指定存储过程中的隔离级别不起作用。

请建议。

1 个答案:

答案 0 :(得分:5)

您似乎误解了事务隔离的工作原理。 “Read committed”意味着:这个工作单元只能读取其他人提交的数据,并等待锁定在未提交的更改上释放。您可能需要学习手册:http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/db2/rbafzmstisol.htm#isol。它特别说“任何行被更改(或当前被UPDATE行锁定的行)由另一个激活组...在提交之前无法读取”。

在DB2 for i v6及更高版本中,您可以在SELECT语句中使用SKIP LOCKED DATA子句来完成您的需要。