Ошибка хранимой процедуры db2, когда оператор обновления следует за откатом

У меня есть хранимая процедура, где в конце я проверяю наличие ошибок, и если есть ошибки, я выполняю откат, а затем обновляю статус в пакетной таблице на «FAILED». Когда я запускаю хранимую процедуру, я регулярно получаю ошибку SQLCODE 818, говорящую о том, что «произошёл конфликт меток времени».

Когда я удаляю оператор обновления, который изменяет статус в пакетной таблице, я не получаю сообщение об ошибке.

Как лучше всего выполнить эти действия, чтобы избежать ошибки?

Участок кода выглядит так:

IF v_error_count > 0 THEN                                           
    -- Batch failed      
    ROLLBACK;       

    UPDATE batch_table bt
    SET bt.batch_status = 'FAILED'
    WHERE batch_id = input_batch_id;        

END IF;

Спасибо за любую помощь.


person user3165854    schedule 22.01.2014    source источник
comment
Какой уровень изоляции используется? возможно, в то же время изменяется другой процесс.   -  person AngocA    schedule 22.01.2014


Ответы (1)


SQL Код -818 указывает, что внутренняя отметка времени, которую DB2 использует для обеспечения согласованности между работающим модулем, соответствует версии DBRM, созданной при предварительной компиляции операторов SQL.

Вы можете проконсультироваться со своим администратором баз данных (или кем-то еще на вашем сайте), потому что конкретные шаги, которые вам нужно выполнить, могут различаться. Общий обзор можно найти на странице эта статья в IBM Knowledge Center.

person bhamby    schedule 22.01.2014