Я думаю, что вы можете использовать rownum или какой-то идентификатор для блокировки только определенных строк, которые вам нужны.
Давайте рассмотрим следующий пример:
-- session1
SQL> create table t1(id number);
Table created.
SQL> insert into t1 values(1);
1 row created.
SQL> insert into t1 values(2);
1 row created.
SQL> insert into t1 values(3);
1 row created.
SQL> insert into t1 values(4);
1 row created.
SQL> commit;
Commit complete.
SQL> select * from t1 where id = 2 for update skip locked;
ID
----------
2
-- Session 2
SQL> select * from t1 where rownum <= 1 for update skip locked;
ID
----------
1
-- Session 3
SQL> select * from t1 for update skip locked;
ID
----------
3
4
Надеюсь, это все прояснит.
А также, обратите внимание, что Oracle создала «пропущенную блокировку» для внутреннего использования в AQ, а затем сделала ее доступной для публичного использования.Oracle использует его для своих внутренних операций, и он работает точно так, как он был реализован для нужд Oracle, чего мы не знаем, поэтому мы обычно злоупотребляем им по незнанию.