Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
 Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Коллеги.

Никто не знает самого быстрого пути вытащить из таблицы первую незалоченную (FOR UPDATE) другой транзакицей запись.

Кроме перебора primary key ничего в голову не приходит.

COMMIT;
29 янв 09, 15:05    [6753988]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
spp
Guest
Не документированная фича, которой конечно же пользоваться нельзя!!!
SELECT * FROM dual FOR UPDATE SKIP LOCKED
29 янв 09, 15:09    [6754020]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
spp
Не документированная фича, которой конечно же пользоваться нельзя!!!
SELECT * FROM dual FOR UPDATE SKIP LOCKED


Работает.

Прямо совсем никак нельзя ?
29 янв 09, 15:15    [6754068]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
Elic
Member

Откуда:
Сообщений: 29979
test_2008
Прямо совсем никак нельзя ?
Легализована только в 11g.
29 янв 09, 15:22    [6754107]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
если будут приставать, то скажите, что в 11-ке подсмотрели ;)
29 янв 09, 15:22    [6754109]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Elic
test_2008
Прямо совсем никак нельзя ?
Легализована только в 11g.


А случалось что в 10-ке не работала ?
У нас 10-ка
29 янв 09, 15:26    [6754128]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
Timm
Member

Откуда: Moscow, Ё-burg
Сообщений: 3696
test_2008
Elic
test_2008
Прямо совсем никак нельзя ?
Легализована только в 11g.


А случалось что в 10-ке не работала ?
У нас 10-ка

с 9-ки работает. жалоб нет.
29 янв 09, 15:37    [6754209]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Первая транзакция:
select * from  my_table where  rownum=1  for update nowait

... Ждем


Вторая транзакция:
   select * from  my_table where  rownum=1  for update nowait  SKIP LOCKED 

Возвращает пустоту.
Хотелось бы первую незалоченную..


COMMIT;
29 янв 09, 15:48    [6754297]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
Elic
Member

Откуда:
Сообщений: 29979
test_2008
nowait
... Ждем
RTFM :)
29 янв 09, 15:52    [6754340]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Elic

test_2008
nowait
... Ждем
RTFM :)


И в чем мудрость нравоучения ?
29 янв 09, 16:04    [6754460]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
test_2008
   select * from  my_table where  rownum=1  for update nowait  SKIP LOCKED 
for rec in (select * from  my_table for update nowait  SKIP LOCKED) loop
  ...
  exit;
end loop;
29 янв 09, 16:05    [6754478]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
test_2008
Elic

test_2008
nowait
... Ждем
RTFM :)


И в чем мудрость нравоучения ?

в том, английский и русский вариант протеворечат друг другу))))))))
приводите реальные тесты....
29 янв 09, 16:07    [6754495]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Jannny
test_2008
   select * from  my_table where  rownum=1  for update nowait  SKIP LOCKED 
for rec in (select * from  my_table for update nowait  SKIP LOCKED) loop
  ...
  exit;
end loop;


Есть подозрение, что
select * from  my_table for update nowait  SKIP LOCKED
залочит все оставшиеся незалоченные
29 янв 09, 16:07    [6754500]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
test_2008
Есть подозрение, что
select * from  my_table for update nowait  SKIP LOCKED
залочит все оставшиеся незалоченные
Кто мешает свои подозрения проверить? :)
29 янв 09, 16:08    [6754508]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
pravednik
приводите реальные тесты....


Т.е. если бы я написал вместо слова ждем - слово курим, то было бы ясней ?
29 янв 09, 16:08    [6754510]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Jannny
Кто мешает свои подозрения проверить? :)


В процессе

Спасибо ....
29 янв 09, 16:09    [6754515]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Jannny
Кто мешает свои подозрения проверить? :)


Работает !!! спасибо ещё раз
29 янв 09, 16:13    [6754553]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
pravednik
Member

Откуда: Jacksonville, FL
Сообщений: 16268
test_2008
pravednik
приводите реальные тесты....


Т.е. если бы я написал вместо слова ждем - слово курим, то было бы ясней ?

я вам про красное, а вы мне про дверь.....
"вы папа - вам виднее" )))))
29 янв 09, 16:19    [6754604]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
pravednik
я вам про красное, а вы мне про дверь.....


Недопоняли друг друга - бывает .....
29 янв 09, 16:23    [6754641]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
test_2008
Jannny
Кто мешает свои подозрения проверить? :)
Работает !!! спасибо ещё раз
лочится на момент фетча строки, а не открытия запроса
29 янв 09, 16:33    [6754737]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Jannny
лочится на момент фетча строки, а не открытия запроса


А почему такое не работает ?

select * from  my_table where  rownum=1  for update nowait  SKIP LOCKED 

Не в курсе ?
29 янв 09, 16:35    [6754754]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
Jannny
Member

Откуда: Спб
Сообщений: 6424
test_2008
А почему такое не работает ?

select * from  my_table where  rownum=1  for update nowait  SKIP LOCKED 

Не в курсе ?
Ну оно вообще-то работает :) , просто for update срабатывает после выполнения условий запроса, а не в середине процесса.
29 янв 09, 16:41    [6754814]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
Elic
Member

Откуда:
Сообщений: 29979
test_2008
А почему такое не работает ?
select * from  my_table where  rownum=1  for update nowait  SKIP LOCKED 
SKIP LOCKED работает после WHERE.
29 янв 09, 16:41    [6754815]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
test_2008
Member

Откуда: Москва
Сообщений: 1209
Понятно.

Всем ещё раз огромное спасибо, очень помогли.

COMMIT;
29 янв 09, 16:43    [6754842]     Ответить | Цитировать Сообщить модератору
 Re: Вытащить первую незалоченную запись  [new]
temp2009
Member

Откуда:
Сообщений: 3
пробую сделать как описано в этой теме:
select * 
from test where rownum = 1 for update nowait skip locked
- возвращает первую запись.

Вторая транзакция:
select * 
from test where rownum = 1 for update nowait skip locked
- ничего не возвращает

Такой запрос:
select * 
from test for update nowait skip locked
блокирует все оставшиеся записи.

Как правильно составить запрос, который всегда выдает для апдейта первую незаблокированную запись?
11 фев 09, 11:58    [6805355]     Ответить | Цитировать Сообщить модератору
Топик располагается на нескольких страницах: [1] 2   вперед  Ctrl      все
Все форумы / Oracle Ответить