Stored procedures 存储过程尝试读取未提交的数据,但不指定要读取已提交数据的隔离级别

Stored procedures 存储过程尝试读取未提交的数据,但不指定要读取已提交数据的隔离级别,stored-procedures,db2,ibm-midrange,db2-400,Stored Procedures,Db2,Ibm Midrange,Db2 400,我有一个存储过程,它尝试读取未提交的数据,尽管指定了读取已提交(*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 CUR

我有一个存储过程,它尝试读取未提交的数据,尽管指定了读取已提交(*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``
我正在使用DB2V6 iseries

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


请给出建议。

您似乎误解了事务隔离的工作原理。“Read committed”的意思是:此工作单元只能读取其他人提交的数据,并等待未提交的更改释放锁。你可能想学习;它特别指出,“由另一个激活组更改的任何行(或当前使用更新行锁锁定的行)在提交之前都无法读取”


在DB2forIv6及更高版本中,您可以在SELECT语句中使用
SKIP LOCKED DATA
子句来完成您似乎想要的任务。

谢谢。这正是我想要的。如果我在select语句中添加SKIP LOCKED DATA子句,效果很好。虽然我不明白的是,为什么它要等待未提交数据的锁被释放?难道它不应该忽略未提交的数据而根本不读取它吗。