вот мой вопрос собсно об этом
каким образом выполняется update множества записей, какой из двух вариантов
ближе?
вариант 1.
- читаем перву запись с подходящими условиями, изменяем
- читаем вторую, изменяем
- читаем третью, натыкаемся на то что другая транзакция ее изменила, ждем...
ждем.. ждем...
этот.
вариант 2.
- читаем все записи предназначенные для изменения (WITH LOCK), натыкаемся на
третьей, что она заблокирована, отменяем чтение, ждем, опять читаем и
блокируем
- пишем изменения
я понимаю что record_version и no_record_version вносят свои коррективы в
этап чтения, но в общем виде какой из вариантов ближе?
первый. второй тебе надо делать самому:
select some_field from some_table where id in (1, 2, 3) order by 1 with
lock;
и потом
update some_table set counter = counter + 1 where id in (1, 2, 3);
ну, если есть желание, то можешь это в execute block объеденить. order
by нужен для того, чтоб записи залочить, иначе они только во время фетча
будут лочится и придется весь резалт-сет на клиента тянуть.
Роман