在函数中使用for循环中的值

时间:2014-01-22 07:44:56

标签: postgresql postgresql-9.2

您好我正在尝试创建一个从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"

1 个答案:

答案 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循环。