Если у меня есть следующий код, вызываемый из нескольких потоков в приложении, существует ли риск взаимоблокировки? Транзакция, используемая для подключения к базе данных для этого, открывается непосредственно перед этим вызовом и закрывается после ее возвращения. Применение: Java База данных: OracleБаза данных Тупики при использовании Rownum?
FUNCTION reserveWork(in_batch_id NUMBER,
in_work_size NUMBER,
in_contentType_id NUMBER) RETURN NUMBER IS
rows_reserved NUMBER := 0;
BEGIN
UPDATE
D_Q1
SET
DQ1_BAT_ID = in_batch_id
WHERE
DQ1_BAT_ID is null
AND DCT_ID = in_contentType_id
AND ROWNUM < (in_work_size + 1);
rows_reserved := SQL%ROWCOUNT;
RETURN (rows_reserved);
END;
Ничего себе, я прочитал ответ Тома Ките, упомянутый в ответе Гэри ниже. Очень круто! Это означает, что если блокировка транзакций будет перезапущена, значит, он не должен блокироваться. –