我正在尝试使用Postgres每1000行更新一个特定的记录。我在寻找一个更好的方法。我的功能描述如下:
CREATE OR REPLACE FUNCTION update_row()
RETURNS void AS
$BODY$
declare
myUID integer;
nRow integer;
maxUid integer;
BEGIN
nRow:=1000;
select max(uid_atm_inp) from tab into maxUid where field1 = '1240200';
loop
if (nRow > 1000 and nRow < maxUid) then
select uid from tab into myUID where field1 = '1240200' and uid >= nRow limit 1;
update tab
set field = 'xxx'
where field1 = '1240200' and uid = myUID;
nRow:=nRow+1000;
end if;
end loop;
END; $BODY$
LANGUAGE plpgsql VOLATILE
我怎样才能改进这个程序?我想有什么不对劲。循环不会结束,需要太多时间。
最佳答案
要在SQL中执行此任务,可以使用row_number
窗口函数,只更新数字可被1000整除的行。
循环没有完成,因为循环中没有EXIT
或RETURN
。