Я сомневаюсь, что вы могли бы когда-нибудь конкурировать с производительностью стандартного обновления SQL с процедурным циклом.Вместо того, чтобы делать это по очереди, просто делайте все как одно утверждение:
with t2 as (
select
uid, row_number() over (order by 1) as rn
from tab
where field1 = '1240200'
)
update tab t1
set field = 'xxx'
from t2
where
t1.uid = t2.uid and
mod (t2.rn, 1000) = 0
В своем комментарии я предполагаю, что вы подразумеваете под «каждой 1000-й строкой», без какого-либо обозначенияКак определить, какой кортеж, какой номер строки.Это легко отредактировать, изменив критерий «упорядочить по».
Добавление второго предложения where в обновлении (t1.field1 = '1240200'
) не повредит, но может не понадобиться, если это вложенный цикл.
Это может быть условно похоже на то, что имеет в виду Лоренц.