在一个函数中,我循环遍历所有行,返回一个select语句。我想跳过第一行和最后一行。我怎么能这样做?
...
FOR arow IN
SELECT (dp).path[1] As index,
ST_AsText((dp).geom) As wktnode,
(dp).geom As vertex
FROM (SELECT
ST_DumpPoints(
ST_Segmentize(NEW.the_geom,
-- the max length of the segment
ST_Length(
NEW.the_geom
)/NEW.dist_calc_pnts
)
) AS dp
) As foo
LOOP
test_me := arow.index;
IF NOT (ST_Equals(arow.vertex, ST_StartPoint(NEW.the_geom))
OR
ST_Equals(arow.vertex, ST_EndPoint(NEW.the_geom))) THEN
RAISE NOTICE 'Calling update_pntzzz(%)', test_me;
INSERT INTO
pntzzz(onedee_id, the_geom)
VALUES(NEW.id, arow.vertex);
END IF;
END LOOP;
...
正如我所说,我不需要第一次和最后一次迭代的结果,但我正在努力实现这一点。现在,if
语句检查当前行的几何形状是否与原始线几何的起点或终点相同 - 这是一个相当昂贵的检查。
答案 0 :(得分:1)
这是一些示例代码,用于说明如何跳过循环中的第一个和最后一个元素。
根据您的使用情况调整它应该很简单。
DO $$DECLARE
counter integer := 0;
i integer;
old_i integer;
BEGIN
FOR i IN 1..10 LOOP
counter := counter + 1;
IF counter > 2 THEN
-- processing of old_i goes here
RAISE WARNING 'Processing row %', old_i;
END IF;
old_i := i;
END LOOP;
END;$$;