我有一个存储过程,它尝试读取未提交的数据,尽管没有指定读取已提交(*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。
如何避免读取未提交的数据,在存储过程中指定隔离级别似乎不起作用。
敬请指教。
发布于 2013-10-19 03:12:50
您似乎误解了事务隔离是如何工作的。"Read committed“的意思就是:此工作单元只能读取其他工作单元提交的数据,并等待未提交更改的锁被释放。您可能想要研究the manual;它特别指出“由另一个激活组更改的任何行(或当前使用UPDATE行锁锁定的行)……在提交之前都无法读取”。
在DB2 for I、v6和更高版本中,您可以在SELECT语句中使用SKIP LOCKED DATA子句来完成您似乎想要的功能。
https://stackoverflow.com/questions/19456948
复制相似问题