Все те записи, к которым вы прикоснулись в цикле с использованием EXCLUSIVE-LOCK
, не будут доступны для блокировки другим пользователем до тех пор, пока TRANSACTION
не будет завершено. Обойти это невозможно. Если второй процесс должен заблокировать эти записи, то все, что вы можете сделать, это уменьшить область действия TRANSACTION
в первом процессе. Это функция безопасности, так что если позже в TRANSACTION
, all произойдет ошибка, изменения, сделанные во время TRANSACTION
, будут отменены. Другой способ взглянуть на это - если бы вы могли снять некоторые блокировки записи во время TRANSACTION
, вы бы потеряли атомарность (все или ничего), которая является частью определения TRANSACTION
.
Следует отметить, что если вам действительно не нужно блокировать эти записи во втором процессе, а просто нужно увидеть их обновленное значение, это возможно. Когда обновленные записи больше не находятся в буфере записи (или статус блокировки записи понижен до NO-LOCK
в TRANSACTION
), они станут неопределенными блокировками, и вы можете просмотреть их обновленные значения, используя NO-LOCK
. Чтобы последняя запись в цикле превратилась в подвешенную блокировку, вы можете сделать это
FIND CURRENT tablerecord NO-LOCK.
Или это, если вам больше не нужен доступ к буферу записи:
RELEASE tablerecord.