在 PLPGSQL FOR 循环中检测空集

Posted

技术标签:

【中文标题】在 PLPGSQL FOR 循环中检测空集【英文标题】:Detection of an empty set in PLPGSQL FOR loop 【发布时间】:2019-11-21 17:58:25 【问题描述】:

有什么方法可以检测到 Postgres 中查询返回的集合是空的吗?

即:

FOR varname IN
   select testvar from foo
LOOP
   <do some stuff on the set>
END LOOP;
-- Loop finished or Set was EMPTY
IF NOT FOUND ?????   THEN
    <do some other stuff for empty set>
END IF;

当然,我可以在循环之前运行查询并使用NOT FOUND 或引入一个计数器,然后在循环结束时检查它是否为0,但我想知道是否有办法避免那个。

(可能更适合 dba.SE,但从这里开始)

【问题讨论】:

是的。只需删除????? @klin - 你说得对,我在源代码中检查过。 【参考方案1】:

如果您只想使用内置解决方案,那么您应该使用FOUND 变量。结果不为空时为true,结果为空时为false。它是安全的,并且值不依赖于循环体中的语句。

【讨论】:

以上是关于在 PLPGSQL FOR 循环中检测空集的主要内容,如果未能解决你的问题,请参考以下文章

我在使用for循环时得到空集

java 增强for循环对于空集和null的判断

对于表中的行,将行保存在临时表中以在 plpgsql 的选择查询中使用其数据

在plpgsql中循环数组维度

在 plpgsql(PostgreSQL 的)中,可以将 CTE 保留到外循环吗?

PLpgSQL:将每条记录存储在 For Loop 中并返回 json