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
$$
我应该如何在这两个日期之间循环?
您似乎对循环的语法感到困惑。
你这里有两个不同的东西:
- 将 select 零行(因为您的日期倒退)到日期变量中的查询。
- 一个没有限制的循环,将永远发出通知。
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
$$
我想在两个日期之间循环,但我的 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
$$
我应该如何在这两个日期之间循环?
您似乎对循环的语法感到困惑。
你这里有两个不同的东西:
- 将 select 零行(因为您的日期倒退)到日期变量中的查询。
- 一个没有限制的循环,将永远发出通知。
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
$$