sql - 如果第一个查询为空,则从第二个查询返回 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;
推荐阅读
- environment-variables - 检测 Tcl 中的环境变量变化
- clickhouse - 位图sql的写法太繁琐,如何简化
- security - Google 控制台 Firebase 机器人测试中的 WebView 内容安全策略异常
- react-native - React Native - 带有 react-navigation 和 typescript 的 I18Next
- activemq-artemis - 在 ActiveMQ Artemis 代理上发送请求时生产者超时
- c++ - 为 GCC 构建 64 位 GNU GMP
- opsgenie - 当警报计数超过 Opsgenie 中的某个值时创建事件
- if-statement - Github Actions IF 表达式语法的问题
- apache-spark - Spark on Yarn - Prometheus 发现
- javascript - 如何用不同的值替换 Javascript 对象的值?