在 PLPGSQL FOR 循环中检测空集

Detection of an empty set in PLPGSQL FOR loop

有什么方法可以检测 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 但从这里开始)

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