db2 - CASE WHEN или IF Statement в CREATE FUNCTION - PullRequest
0 голосов
/ 31 декабря 2018

Привет! У меня возникла проблема с управлением операторами CASE WHEN или IF в вызове CREATE FUNCTION в DB2. Я пробовал следующее утверждение:

CREATE OR REPLACE FUNCTION NAECHSTES_DATUM(PARAM1 CHAR(6), PARAM2 DATE)
RETURNS DATE
LANGUAGE SQL
BEGIN
    DECLARE BASEDATE DATE;
    DECLARE THATDATE DATE;
    SET BASEDATE = TO_DATE(CONCAT(PARAM1,CAST(YEAR(PARAM2) AS CHAR(4))),'DD.MM.YYYY');
    IF (BASEDATE >= PARAM2) 
    THEN SET THATDATE = BASEDATE;
    ELSE SET THATDATE = BASEDATE + 1 YEAR;
    END IF;
    RETURN THATDATE;
END 

Я получаю эту ошибку

[- 104] Auf "+ 1 YEAR" токен "folgte das unerwartete" "КОНЕЦ ЗАЯВЛЕНИЯ".Жетоны Mögliche: "END IF" .. SQLCODE = -104, SQLSTATE = 42601, DRIVER = 4.14.113

Аналогичный результат при использовании CASE WHEN.

Знаете ли вы, где может возникнуть проблемабыть?

1 Ответ

0 голосов
/ 31 декабря 2018

Используйте альтернативный разделитель операторов после END функции.

Внутри функции разделитель операторов - это точка с запятой (;)

Но Db2 должен знать дополнительный разделитель для обозначенияконец блока.

Для командной строки Db2 (в сценариях оболочки, пакетных файлах) вы можете использовать параметр командной строки "-td @" и завершить блок символом @.Внутри файла, который содержит функцию, вы можете использовать:

--#SET TERMINATOR @
в любом месте перед функциональным блоком, а затем завершить блок с помощью @

Если вы используете инструмент GUI для отправкиDDL или SQL, каждый инструмент GUI имеет свой собственный способ указания альтернативных разделителей операторов.Посмотрите на настройки и свойства.Всегда целесообразно полностью описать свой набор инструментов (какие программы, версии, операционную систему и т. Д.) В вашем вопросе.

...