powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / forall update
29 сообщений из 29, показаны все 2 страниц
forall update
    #39722940
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Всем доброго,

хочу использовать
Код: plsql
1.
forall update

, боюсь что в выборке могут быть залоченные записи. Как вообще эта проблема решается в случае использования оператора
Код: plsql
1.
forall

? всем спасибо.
...
Рейтинг: 0 / 0
forall update
    #39722941
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogв выборке могут бытьКакой выборке?
cobalt_frogКак вообще эта проблема решается в случае использования оператораА как ты её решаешь без использования оператора?
...
Рейтинг: 0 / 0
forall update
    #39722979
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eliccobalt_frogв выборке могут бытьКакой выборке?
cobalt_frogКак вообще эта проблема решается в случае использования оператораА как ты её решаешь без использования оператора?

1. Выбираю список нужных строк таблицы и кидаю ее в коллекцию bulk-ом.
2. Произвожу с коллекцией необходимые манипуляции
3. Необходимо по этим записям данные в другой таблице, некоторые строки которые могу быть залочены.

Без оператора можно решить разными способами, например использовать skip locked или update nowait и обрабатывать exception.
...
Рейтинг: 0 / 0
forall update
    #39723017
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogБез оператора можно решить разными способамиНе считай, что задающие встречный вопрос такие же идиоты. Раз спросили, вероятно твои представления о проблеме имеют изъян, однозначно угадать который по изложению нельзя.
...
Рейтинг: 0 / 0
forall update
    #39723683
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
я так понял если есть вероятность того, что записи могут быть залочены в другой сессии, использовать forall update нецелесообразно. Придется апдейтить записи построчно.
...
Рейтинг: 0 / 0
forall update
    #39723693
Фотография SY
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogя так понял если есть вероятность того, что записи могут быть залочены в другой сессии, использовать forall update нецелесообразно. Придется апдейтить записи построчно.

А что изменится? UPDATE залоченой записи повиснет что с FORALL что без него.

SY.
...
Рейтинг: 0 / 0
forall update
    #39724274
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SYcobalt_frogя так понял если есть вероятность того, что записи могут быть залочены в другой сессии, использовать forall update нецелесообразно. Придется апдейтить записи построчно.

А что изменится? UPDATE залоченой записи повиснет что с FORALL что без него.

SY.


Можно перед update - ом каждой строики в цикле сделать
Код: plsql
1.
select ..for update nowait 

если перед в exeption не вылетит, то апдейтить. Е
сть альтернативный вариант?
...
Рейтинг: 0 / 0
forall update
    #39724279
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogМожно перед update - ом каждой строики в цикле сделатьТ.е. для тебя select for update + update = update?
...
Рейтинг: 0 / 0
forall update
    #39724288
Фотография -2-
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogЕсть альтернативный вариант?cobalt_frog1. Выбираю список нужных строк таблицы и кидаю ее в коллекцию bulk-ом.
...
Рейтинг: 0 / 0
forall update
    #39724296
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Есть ненулевая вероятность, что даже если коллекцию буду набирать
Код: plsql
1.
select ..for update skip locked

, то за время прохождения всего цикла какой нить процесс не попытается залочить одну из этих записей (так вот реализовали умельцы до меня), поэтому гарантированынй способ вижу следующим:

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
...
open cur;
fetch cur bulk collect into cur_array;
for x in 1..cur_array.count
  loop
    begin
      select  id into i from tst where id = cur_arrya(x).id for update nowait;
    exception
      --запись залочена
      continue;
    end;

    update tst
       set name = ...
     where id = cur_arrya(x).id;
    commit;
  end loop;
close cur;
...
...
Рейтинг: 0 / 0
forall update
    #39724304
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogЕсть ненулевая вероятность, что даже если коллекцию буду набирать
Код: plsql
1.
select ..for update skip locked

, то за время прохождения всего цикла какой нить процесс не попытается залочить одну из этих записейЕсли собрался циклить по залоченному, незачем коммитить в теле цикла. Тем более, что в forall не сможешь.
...
Рейтинг: 0 / 0
forall update
    #39724361
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eliccobalt_frogЕсть ненулевая вероятность, что даже если коллекцию буду набирать
Код: plsql
1.
select ..for update skip locked

, то за время прохождения всего цикла какой нить процесс не попытается залочить одну из этих записейЕсли собрался циклить по залоченному, незачем коммитить в теле цикла. Тем более, что в forall не сможешь.

Хочу поскорее отпустить блокировку, пока параллельный процесс ее не залочил. Думаете есть риск 01555?
...
Рейтинг: 0 / 0
forall update
    #39724371
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogХочу поскорее отпустить блокировку, пока параллельный процесс ее не залочил.ты чего-то не понимаешь. Поэтому forall тебе вреден.
...
Рейтинг: 0 / 0
forall update
    #39724424
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
cobalt_frogМожно перед update - ом каждой строики в цикле сделать
Код: plsql
1.
select ..for update nowait 

если перед в exeption не вылетит, то апдейтить. Е
сть альтернативный вариант?
Что будешь делать с записями которые не удалось проапдейтить?
...
Рейтинг: 0 / 0
forall update
    #39724450
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
SkilledJuniorcobalt_frogМожно перед update - ом каждой строики в цикле сделать
Код: plsql
1.
select ..for update nowait 

если перед в exeption не вылетит, то апдейтить. Е
сть альтернативный вариант?
Что будешь делать с записями которые не удалось проапдейтить?

в таблицу для доката кидать.
...
Рейтинг: 0 / 0
forall update
    #39724783
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eliccobalt_frogХочу поскорее отпустить блокировку, пока параллельный процесс ее не залочил.ты чего-то не понимаешь. Поэтому forall тебе вреден.

что может пойти не так? запись по залоченному списку после коммита разлочится, можете на тестовом примере проверить.
...
Рейтинг: 0 / 0
forall update
    #39724795
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogчто может пойти не так?Чудак, что будет с "параллельным процессом", если ты не "отпустишь блокировку"?
...
Рейтинг: 0 / 0
forall update
    #39726977
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eliccobalt_frogчто может пойти не так?Чудак, что будет с "параллельным процессом", если ты не "отпустишь блокировку"? будет ждать пока не отпущу
...
Рейтинг: 0 / 0
forall update
    #39727004
123йй
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogбудет ждать пока не отпущу
наивный
...
Рейтинг: 0 / 0
forall update
    #39727007
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
123ййcobalt_frogбудет ждать пока не отпущу
наивный сам ее залочит и будет ждать пока первый процесс не разлочит..не?
...
Рейтинг: 0 / 0
forall update
    #39727041
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogElicпропущено...
Чудак, что будет с "параллельным процессом", если ты не "отпустишь блокировку"? будет ждать пока не отпущуИ как это соотносится с
cobalt_frogпока параллельный процесс ее не залочил?
...
Рейтинг: 0 / 0
forall update
    #39727055
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eliccobalt_frogпропущено...
будет ждать пока не отпущуИ как это соотносится с
cobalt_frogпока параллельный процесс ее не залочил?

я думал что это любому очевидно и не надо разжевывать, что второй процесс залочит запись и будет ждать пока в первом процессе не произойдет commit/rollback.
...
Рейтинг: 0 / 0
forall update
    #39727057
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eliccobalt_frogЕсть ненулевая вероятность, что даже если коллекцию буду набирать
Код: plsql
1.
select ..for update skip locked

, то за время прохождения всего цикла какой нить процесс не попытается залочить одну из этих записейЕсли собрался циклить по залоченному, незачем коммитить в теле цикла. Тем более, что в forall не сможешь.

почему не стоить коммитить в теле цикла?
...
Рейтинг: 0 / 0
forall update
    #39727071
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogпочему не стоить коммитить в теле цикла?Фиксировать-то можно, только смысла блокировать всё до цикла нет, вплоть до ora-1002.
...
Рейтинг: 0 / 0
forall update
    #39727076
Фотография Elic
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogя думал что это любому очевидно и не надо разжевывать, что второй процесс залочит запись и будет ждать пока в первом процессе не произойдет commit/rollback.Тебе вредно не то что разжёвывать, но даже думать, потому что ты не владеешь терминологией.
Тот, кто ждёт разблокировки записи, не может одновременно и "залочить" её.
...
Рейтинг: 0 / 0
forall update
    #39727088
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eliccobalt_frogя думал что это любому очевидно и не надо разжевывать, что второй процесс залочит запись и будет ждать пока в первом процессе не произойдет commit/rollback.Тебе вредно не то что разжёвывать, но даже думать, потому что ты не владеешь терминологией.
Тот, кто ждёт разблокировки записи, не может одновременно и "залочить" её.
криво выразился.
...
Рейтинг: 0 / 0
forall update
    #39727089
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Eliccobalt_frogпочему не стоить коммитить в теле цикла?Фиксировать-то можно, только смысла блокировать всё до цикла нет, вплоть до ora-1002.

спасибо большое за пояснение.
...
Рейтинг: 0 / 0
forall update
    #39727105
Фотография andrey_anonymous
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
cobalt_frogElicпропущено...
Фиксировать-то можно, только смысла блокировать всё до цикла нет, вплоть до ora-1002.
спасибо большое за пояснение.
Помимо этого fetch-over-commit - дорожка в сторону ORA-1555.
...
Рейтинг: 0 / 0
forall update
    #39727110
cobalt_frog
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
andrey_anonymouscobalt_frogпропущено...

спасибо большое за пояснение.
Помимо этого fetch-over-commit - дорожка в сторону ORA-1555.

про нее как раз таки и не забыл)

cobalt_frogElicпропущено...
Если собрался циклить по залоченному, незачем коммитить в теле цикла. Тем более, что в forall не сможешь.

Хочу поскорее отпустить блокировку, пока параллельный процесс ее не залочил. Думаете есть риск 01555?
...
Рейтинг: 0 / 0
29 сообщений из 29, показаны все 2 страниц
Форумы / Oracle [игнор отключен] [закрыт для гостей] / forall update
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]