2013-10-18 42 views
1

我已經嘗試讀取未提交的數據,指定的隔離級別的inspite一個存儲過程來讀提交(* CS)。 以下是我的存儲過程。存儲過程試圖讀取指定隔離級別的未提交數據inspite到讀提交

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。

我怎樣才能避免讀取未提交的數據,似乎在指定存儲過程的隔離級別不起作用。

請指教。

回答

5

您似乎誤解了事務隔離的工作原理。 「讀取已提交」意味着:這個工作單元只能讀取其他人提交的數據,並等待鎖定在未提交的更改上發佈。您可能需要學習手冊:http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/db2/rbafzmstisol.htm#isol。它特別指出,「任何行被另一個激活組更改(或當前被更新行鎖定鎖定的行)......在提交之前不能讀取」。

在DB2 for我V6,以後你可以用SKIP LOCKED DATA子句中的SELECT語句來完成你彷彿想。

+1

謝謝。那正是我想要的。如果我在select語句中添加SKIP LOCKED DATA子句,它工作正常。 – Abs

+0

雖然我不明白的是,爲什麼它會針對未提交的數據等待鎖釋放?它不應該忽略那些沒有被讀取的未提交的數據。 – Abs

相關問題