【发布时间】:2013-02-20 03:47:58
【问题描述】:
我在plpgsql中做了以下功能。它工作正常,它返回'OK',但由于某种原因它在表temp 中没有输入任何内容。
CREATE OR REPLACE FUNCTION public.get_route(node integer[])
RETURNS character varying AS
$BODY$DECLARE
i int := 0;
_r record;
vertex int;
BEGIN
FOREACH i IN ARRAY node
LOOP
IF( i < (array_length(node, 1) - 1))
THEN
FOR _r IN EXECUTE 'select * from shortest_path(''
select id as id, source_id::int4 as source, target_id::int4 as target, cost, reverse_cost
from network_of_point'','|| node[i] ||','|| node[i+1] ||', true, true)'
LOOP
vertex := _r.vertex_id;
EXECUTE 'insert into temp
select nextval(''road_intersection_id_seq''), point
from distinct_network_point
where distinct_network_point.id ='|| vertex;
END LOOP;
i = i + 1;
END IF;
END LOOP;
RETURN 'OK';
END;$BODY$
以下是我用来调用函数的语法:
select get_route('{2,7}')
【问题讨论】:
-
你调用函数后会
COMMIT吗? -
提交是什么意思?显然,如果您的意思是这样,我已经执行了查询。 @IgorRomanchenko
-
尝试在执行前打印顶点的值。如果为 null,则查询将失败。
-
我该怎么做呢?使用加薪通知? @DavideBerra
-
RAISE INFO 'vertex: %', vertex;
标签: arrays function postgresql plpgsql