в то время как l oop заканчивается в начале SAP Hana Sql - PullRequest
0 голосов
/ 23 января 2020

У меня есть следующий SQL -Script:

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;

Я использую его в файле .hdbprocedure в SAP Cloud Platform. Развертывание работает нормально. Когда я вызываю процедуру с CALL P_OVERVIEW(), я просто получаю значения, когда I = 0. Любая идея, почему это случилось?

1 Ответ

0 голосов
/ 04 февраля 2020

В коде есть небольшая опечатка.
При ссылке на значение переменной 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_ является простой опцией для этого.

...