如何使用函数 pgr_dijkstra 的循环
how to use a loop with the function pgr_dijkstra
我想使用循环来计算两个节点 152 和 17720 之间的行进距离(我使用函数 pgr_dijkstra),每次删除一个单元格。一个单元格包含多个道路链接。 grid_edges_routard table 包含道路链接和相应的单元格。
我想为每个阻塞的单元格计算两个节点之间的行进距离。
我必须使用 pgr_dijkstra 来第二次显示所访问的链接。
CREATE OR REPLACE FUNCTION get_dist_grid()
RETURNS TABLE (
celref_blocked INT,
dist INT
) AS $$
DECLARE
var_r record;
BEGIN
FOR var_r IN(SELECT distinct(cellule)as cel from grid_edges_routard )
LOOP
SELECT * FROM pgr_dijkstra('SELECT id, source, target,cost
FROM road_routard.edges_vulnerabilite
where id not in (select edge_id
from grid_edges_routard
where cellule=var_r) ',152 ,17720, FALSE)
where edge=-1;
celref_blocked := var_r.cel ;
RETURN NEXT;
END LOOP;
END; $$
LANGUAGE 'plpgsql';
select get_dist_grid()
我收到一条错误消息:错误:列 « var_r » 不存在。
我使用 postgresql 9.5.
定义一个记录类型的新变量 (var_q),然后像这样 Execute 'SELECT * FROM pgr_dijkstra(''SELECT id, source, target,cost FROM road_routard.edges_vulnerabilite where id not in (select edge_id from grid_edges_routard where cellule='||var_r||') '',152 ,17720, FALSE) where edge=-1' into var_q
对定义的变量执行 select 查询
这可能会产生一些错误,因为我们必须转义内部查询的引号,如果它不起作用,请尝试转义引号,然后您可以像使用 celref_blocked := var_r.cel
我想使用循环来计算两个节点 152 和 17720 之间的行进距离(我使用函数 pgr_dijkstra),每次删除一个单元格。一个单元格包含多个道路链接。 grid_edges_routard table 包含道路链接和相应的单元格。 我想为每个阻塞的单元格计算两个节点之间的行进距离。 我必须使用 pgr_dijkstra 来第二次显示所访问的链接。
CREATE OR REPLACE FUNCTION get_dist_grid()
RETURNS TABLE (
celref_blocked INT,
dist INT
) AS $$
DECLARE
var_r record;
BEGIN
FOR var_r IN(SELECT distinct(cellule)as cel from grid_edges_routard )
LOOP
SELECT * FROM pgr_dijkstra('SELECT id, source, target,cost
FROM road_routard.edges_vulnerabilite
where id not in (select edge_id
from grid_edges_routard
where cellule=var_r) ',152 ,17720, FALSE)
where edge=-1;
celref_blocked := var_r.cel ;
RETURN NEXT;
END LOOP;
END; $$
LANGUAGE 'plpgsql';
select get_dist_grid()
我收到一条错误消息:错误:列 « var_r » 不存在。 我使用 postgresql 9.5.
定义一个记录类型的新变量 (var_q),然后像这样 Execute 'SELECT * FROM pgr_dijkstra(''SELECT id, source, target,cost FROM road_routard.edges_vulnerabilite where id not in (select edge_id from grid_edges_routard where cellule='||var_r||') '',152 ,17720, FALSE) where edge=-1' into var_q
对定义的变量执行 select 查询
这可能会产生一些错误,因为我们必须转义内部查询的引号,如果它不起作用,请尝试转义引号,然后您可以像使用 celref_blocked := var_r.cel