2014-01-22 2 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; 

Я знаю, проблема в том, как я ссылаюсь на значение i. Как правильно установить i из цикла, чтобы интервал был правильным, пожалуйста.

Ошибка броска является

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) 

для создания интервалов. Если вам нужно, вы можете перебрать это, но я обычно считаю, что все, не требующее обработки исключений, лучше выполнять как обычные заданные операции, а не петли pl/pgsql.

Смежные вопросы