Предыдущая тема :: Следующая тема |
Автор |
Сообщение |
Phill Участник
Вступление в Клуб: 09.07.2010
|
Пт Авг 30, 2013 16:45  Выбор не заблокированных элеменлтов |
|
Полезность: Нет оценки
|
Добрый день!
Необходимо из таблицы выбрать только те элементы, которые не заблокированы, при этом не блокировать их.
Пример
Есть простая операция в типе [USER] текст:
Код: |
begin
this%lock;
utils.sleep(60);
end;
|
Нужно выбрать все элементы кроме этого
Если делать:
Код: |
select a1.ID from z#USER a1
for update of a1.ID skip locked;
|
то в выборку попадут все элементы кроме этого, но при этом они будут заблокированы, а этого не надо.
Подскажите как быть? |
|
|
yaffil Профи
Вступление в Клуб: 18.08.2011
|
Пт Авг 30, 2013 17:00  Re: Выбор не заблокированных элеменлтов |
|
Полезность: Нет оценки
|
Собственно у вас и написано, чтобы заблокировать. Зачем вам for update в селекте, если хотите просто моментальный снимок таблицы |
|
|
Phill Участник
Вступление в Клуб: 09.07.2010
|
Пт Авг 30, 2013 17:02   |
|
Полезность: Нет оценки
|
Собственно for update и не нужен, я в качестве примера написал |
|
|
Alkov Профи
Вступление в Клуб: 23.09.2010
|
Пн Сен 02, 2013 09:25   |
|
Полезность: Нет оценки
|
Ну на крайняк можно конечно в цикле перебрать типа rtl.check_lock() но красивей конечно одним селектом... |
|
|
maestro Профи
Вступление в Клуб: 12.10.2010
|
Пн Сен 02, 2013 14:19   |
|
Полезность: Нет оценки
|
Phill пишет: | Собственно for update и не нужен, я в качестве примера написал |
Можно после select for update выполнить rollback или commit. Это снимет блокировки.
Селект делать в автономной транзакции, дабы не затронуть рабочую транзакцию. |
|
|
Phill Участник
Вступление в Клуб: 09.07.2010
|
Пн Сен 02, 2013 15:30   |
|
Полезность: Нет оценки
|
Да, вариант такой был. Попробовал, вроде работает.
Если больше вариантов не будет, то так и оставлю. |
|
|
|