如果第一个查询为空,则PostgreSQL函数从第二个查询返回



我在Windows中有一个PostgreSQL 11x环境。我正试图找出返回查询结果的函数的语法。下面代码中的第一个查询在大多数情况下都能更好地工作,但如果它不能返回一些东西,那么我想使用第二个查询的返回——它要慢得多,但至少有一些数据被返回。这是我的功能:

CREATE OR REPLACE FUNCTION public.myfunction()
RETURNS TABLE(start_vid bigint, end_vid bigint, agg_cost double precision)
LANGUAGE plpgsql
AS $function$
DECLARE 
--declarations
BEGIN   
RETURN QUERY
SELECT  * FROM pgr_dijkstraCost(
'SELECT gid as id, * FROM ways  as r, 
(SELECT ST_Expand(ST_Extent(the_geom), ' || box_size || ') as box  FROM ways as edge_table    
WHERE edge_table.source = ' || VT1 || ' OR edge_table.target = ' || VT2 || ') as box
WHERE r.the_geom && box.box',
VT1, VT2, arg_directed_flag::boolean
RETURN QUERY
SELECT * FROM pgr_dijkstraCost( 'SELECT gid as id, * FROM ways', VT1, VT2, 
arg_directed_flag::boolean); 
END
$function$

注意:只有当第一个SELECT没有返回任何内容时,我才想执行第二个SELECT。找不到任何PostgreSQL代码来修改我的函数,而且对PostgreSQL环境还很陌生。

谢谢!

如果上一个查询返回至少一行,则可以使用FOUND变量,即true

IF (FOUND = FALSE) THEN
RETURN QUERY
SELECT * FROM pgr_dijkstraCost( 'SELECT gid as id, * FROM ways', VT1, VT2, 
arg_directed_flag::boolean); 
END IF;

最新更新