2014-01-22 65 views
0

嗨,我想創建一個函數,循環從1到12,然後使用該循環值來計算日期這裏是我的代碼到目前爲止的循環這是哪裏問題是。使用函數中的for循環的值

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; 

我知道問題是我如何引用值我。我如何正確引用我從循環,所以間隔是正確的,請。

拋出的錯誤是

ERROR: invalid input syntax for type interval: "i month" 

回答

3

你不能代替一個變種成這樣一個字符串。在不使用動態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循環。