1

在 PostGIS SQL 编辑器中,我只想制作一个循环以使此功能正常工作

For Loopid = 0 to 1000, then execute the following statments:

UPDATE public.globaldtm 
SET "UTM" = loopid 
WHERE rid IN (SELECT rid FROM globaldtm WHERE ST_Intersects(rast,(select geom from utm where gid =loopid)));

在此处输入图像描述

如何在这个 SQL 编辑器中编写一个简单的代码来使循环工作。谢谢。

4

2 回答 2

4

在更新语句generate_series()的可选FROM子句中使用 set-returning函数:

UPDATE public.globaldtm 
SET UTM = loopid
FROM generate_series(0, 1000) as x(loopid) -- Added this line
WHERE rid IN (SELECT rid FROM globaldtm WHERE ST_Intersects(rast,(select geom from utm where gid =loopid)));

这是您的查询,并添加了以下行:

FROM generate_series(0, 1000) as x(loopid)

在 SQLFiddle 上查看类似的简化查询的现场演示。

于 2013-07-13T10:47:29.303 回答
2

创建一个函数:

CREATE OR REPLACE FUNCTION updateValuesWithLoop()
RETURNS void
AS $$
BEGIN
  FOR Loopid  IN 0..1000 LOOP
    UPDATE public.globaldtm 
       SET "UTM" = loopid 
     WHERE rid IN (SELECT rid FROM globaldtm WHERE ST_Intersects(rast,(select geom from utm where gid =loopid)));
  END LOOP;
  RETURN;
END;
$$ LANGUAGE plpgsql;

执行函数:

select updateValuesWithLoop()
于 2013-07-13T10:41:26.663 回答