В коде есть небольшая опечатка.
При ссылке на значение переменной I
необходимо поставить двоеточие :
перед: :I
.
должно работать
PROCEDURE "P_OVERVIEW" ()
LANGUAGE SQLSCRIPT
READS SQL DATA
AS
BEGIN
DECLARE I INT = 0;
WHILE :I < 24 DO
SELECT A, B, COUNT(A) AS COUNT, LAST_DAY(ADD_MONTHS(CURRENT_TIMESTAMP, -:I)) AS "DATE", I
FROM Table
WHERE LAST_DAY(ADD_MONTHS(CURRENT_TIMESTAMP, -:I)) BETWEEN ENTRY_DATE AND VALID_UNTIL
GROUP BY A, B
ORDER BY B, A;
I := :I+1;
END WHILE;
END;
Как замечание: использование al oop здесь, вероятно, не лучший подход. Вы можете просто создать подзапрос, который генерирует «последний день месяца» за последние два года на лету. Табличная функция генератора SERIES_GENERATE_
является простой опцией для этого.