您好我正在尝试创建一个从1到12循环的函数,然后使用该循环值来计算日期,这是我的代码到目前为止的问题所在的循环。
FOR i IN 1..12 LOOP
r.duedate := alert_start_period + interval 'i month';
RAISE NOTICE 'Month % gives date of %', i, r.duedate;
END LOOP;
我知道问题是我如何引用价值i。我如何从循环中正确引用i,以便间隔正确。
抛出的错误是
ERROR: invalid input syntax for type interval: "i month"
答案 0 :(得分:3)
您无法将var替换为类似的字符串。不使用动态SQL,最简洁的方法是乘数:
r.duedate := alert_start_period + i * INTERVAL '1' MONTH;
然而,这整个想法很难看。循环是不必要的。使用:
generate_series(alert_start_period, alert_start_period + INTERVAL '12' MONTH, INTERVAL '1' MONTH)
生成间隔。如果必须,你可以循环使用它,但我通常发现不需要异常处理的所有内容都比普通的set操作更好,而不是pl / pgsql循环。