Хранимая процедура пытается прочитать незафиксированные данные, несмотря на указание уровня изоляции для чтения зафиксированных

У меня есть хранимая процедура, которая пытается прочитать неподтвержденные данные, несмотря на указание уровня изоляции для Read commit (*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.

Как я могу избежать чтения незафиксированных данных, кажется, что указание уровня изоляции в хранимой процедуре не работает.

Пожалуйста посоветуй.

1 ответ

Вы, кажется, неправильно понимаете, как работает изоляция транзакции. "Зафиксировано чтение" означает только это: эта единица работы может только читать данные, переданные другими, и ожидает, пока не будут сняты блокировки при незафиксированных изменениях. Вы можете изучить руководство: http://publib.boulder.ibm.com/infocenter/iseries/v5r4/topic/db2/rbafzmstisol.htm. В частности, в нем говорится, что "любая строка, измененная (или строка, которая в данный момент заблокирована блокировкой строки UPDATE) другой группой активации... не может быть прочитана, пока она не будет зафиксирована".

В DB2 для i v6 и более поздних версий вы можете использовать SKIP LOCKED DATA предложение в операторе SELECT, чтобы выполнить то, что вы, кажется, хотите.

Другие вопросы по тегам