Abs*_*Abs 1 db2 stored-procedures db2-400 ibm-midrange
我有一个存储过程尝试读取未提交的数据,尽管指定隔离级别为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``
Run Code Online (Sandbox Code Playgroud)
我正在使用Db2 v6 iseries.
如何避免读取未提交的数据,似乎指定存储过程中的隔离级别不起作用.
请指教.
您似乎误解了事务隔离的工作原理."Read committed"意味着:这个工作单元只能读取其他人提交的数据,并等待锁定在未提交的更改上释放.您可能需要学习该手册:http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/db2/rbafzmstisol.htm#isol.它特别说"另一个激活组改变了任何行(或者当前用UPDATE行锁定的行)......在提交之前无法读取".
在DB2 for i v6及更高版本中,您可以SKIP LOCKED DATA在SELECT语句中使用子句来完成您想要的内容.