Почему не использовать select только для обновления? Ниже тестируется локально в plsql разработчику.
в первом сеансе я делаю следующее
SELECT id , name
FROM ex_employee
FOR UPDATE;
во второй сессии я запускаю ниже, однако это зависает.
SET serveroutput ON size 2000
/
begin
declare curSOR cur_name_test IS
SELECT id , name
FROM ex_employee
WHERE id = 1
FOR UPDATE ;
begin
for i in cur_name_test loop
dbms_output.put_line('inside cursor');
end loop;
end;
end;
/
commit
/
когда я фиксирую в первом сеансе, блокировка будет снята, и второй сеанс выполнит свою работу. Я думаю, что вы хотите, бесконечное ожидание.
Однако такой механизм блокировки (пессимистическая блокировка) может привести к взаимоблокировкам, если его неправильно и тщательно не обработать (первый сеанс ожидает второй сеанс, а второй сеанс ожидает первый сеанс).
Что касается nowait, то это нормально, когда ресурс ошибок занят, потому что вы говорите, что запрос не ждет, если есть блокировка. вместо этого вы можете подождать 30, что будет ждать 30 секунд, а затем вывести ошибку, но это не то, что вы хотите (я думаю)
Что касается пропуска заблокированных, то выбор пропустит заблокированные данные, например, если у вас есть 5 строк, и одна из них заблокирована, тогда выбор не будет читать эту строку. Вот почему, когда все данные заблокированы, возникает ошибка, потому что ничего нельзя пропустить. и я думаю, это не то, что вы хотите в вашем сценарии.