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

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

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

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


person Abs    schedule 18.10.2013    source источник


Ответы (1)


Вы, кажется, неправильно понимаете, как работает изоляция транзакций. Чтение зафиксированных означает именно это: эта единица работы может только читать данные, зафиксированные другими, и ждет, пока не будут сняты блокировки незафиксированных изменений. Вы можете изучить руководство; в частности, в нем говорится, что любая строка, измененная (или строка, которая в настоящее время заблокирована блокировкой строки UPDATE) другой группой активации ... не может быть прочитана до тех пор, пока она не будет зафиксирована.

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

person mustaccio    schedule 18.10.2013
comment
Спасибо. Я именно этого и хотел. Он отлично работает, если я добавляю предложение SKIP LOCKED DATA в операторе select. - person Abs; 19.10.2013
comment
Хотя я не понимаю, почему он ждет освобождения блокировок для незафиксированных данных? Разве он не должен просто игнорировать незафиксированные данные, не читая их вообще. - person Abs; 19.10.2013