我在plpgsql中做了以下功能。它工作正常,它返回'OK'
,但由於某種原因它沒有在表temp
表中輸入任何內容。plpgsql函數無結果
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$
以下是我使用調用該函數的synatx:
select get_route('{2,7}')
您在調用函數後執行'COMMIT'嗎? – 2013-03-05 16:43:40
你提交什麼意思?顯然,如果你的意思是這樣的話,我已經完成了對查詢的執行。 @IgorRomanchenko – 2013-03-05 17:45:22
嘗試在執行前打印頂點的值。如果它爲空,則查詢將失敗。 – 2013-03-05 18:11:59