【问题标题】:Stored procedure tries to read uncommitted data inspite of specifying the isolation level to read committed存储过程尝试读取未提交的数据,尽管指定了要读取已提交的隔离级别
【发布时间】:2013-10-18 18:46:43
【问题描述】:

我有一个存储过程,它尝试读取未提交的数据,尽管将隔离级别指定为已提交 (*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 系列。

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

请指教。

【问题讨论】:

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


    【解决方案1】:

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

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

    【讨论】:

    • 谢谢。这正是我想要的。如果我在 select 语句中添加 SKIP LOCKED DATA 子句,它工作正常。
    • 虽然我不明白的是,为什么它要等待释放未提交数据的锁?它不应该只是忽略未提交的数据根本不读取它。
    猜你喜欢
    • 2020-05-01
    • 1970-01-01
    • 2020-08-18
    • 2014-01-03
    • 2014-02-16
    • 2015-05-20
    • 1970-01-01
    • 2011-02-14
    • 1970-01-01
    相关资源
    最近更新 更多