PL/pgSQL 无限循环

PL/pgSQL Loops Indefinitely

我想在两个日期之间循环,但我的 PL/pgSQL 代码进入无限循环。我想我在这里遗漏了一些东西。

do $$
    declare
        the_dates date;
    begin
        select gs from generate_series('2019-11-01'::date, '2012-11-30', '1 day') as gs into the_dates;
        loop
            raise notice '%', the_dates;
        end loop;
    end
$$

我应该如何在这两个日期之间循环?

您似乎对循环的语法感到困惑。

你这里有两个不同的东西:

  1. 将 select 零行(因为您的日期倒退)到日期变量中的查询。
  2. 一个没有限制的循环,将永远发出通知。

https://www.postgresql.org/docs/current/plpgsql-control-structures.html#PLPGSQL-RECORDS-ITERATING

您没有遍历 SELECT 语句的结果。

如果你想遍历一个查询的结果你 need to use for record in select ...

do $$
declare
  l_date_row record;
begin
  for l_date_row in select gs 
                    from generate_series('2012-11-30'::date, '2019-11-01'::date, '1 day') as gs
    raise notice '%', l_date_row.gs;
  end loop;
end
$$