Упорядочить в цикле for (SQL UDF)

Я хочу объединить несколько строк с помощью SQL UDF. Я хочу сначала выбрать строки, упорядоченные по их идентификатору, а затем объединить их в столбце, разделенном запятыми. У меня ошибка в предложении order by в моей функции, так как она находится внутри цикла for. Есть ли способ запустить это, не удаляя заказ по предложению? Моя база данных - DB2

CREATE FUNCTION mySchema.getDates(recId INTEGER)
RETURNS VARCHAR(1024)
LANGUAGE SQL
    BEGIN ATOMIC
        DECLARE STR VARCHAR(1024);
        SET STR = '' ;
        LOOP1 : FOR ROW AS (select replace(char(myDate,EUR),'.','/') as myDate from myTable.BookingDates where recId=recId order by rec_crt-id)
        DO
            IF ROW.myDate IS NOT NULL THEN
                SET STR = STR || CAST ( ROW.myDate AS VARCHAR ( 20 ) ) || ', ' ;
            END IF ;
        END FOR;
    RETURN STR ;
END 
SQL State: 42601
Vendor Code: -199
Message: [SQL0199] Keyword ORDER not expected. Valid tokens: ) UNION EXCEPT. Cause . . . . . :   The keyword ORDER was not expected here.

1 ответ

Это не сработает

where recId=recId

DB2 не поймет, что вы хотите, чтобы один из них был параметром функции, а другой - именем столбца. Он будет использовать один и тот же для обоих, с эффектом возврата всех строк. Вам нужно назвать свой параметр функции чем-то отличным от имени столбца.

Кроме этого, код, похожий на вышеупомянутый, прекрасно работает для меня.

Вы новичок в написании функций? Одной из распространенных ошибок является установка разделителя операторов редактора SQL на ;, Это заставит его попытаться разбить функцию на операторы, а не отправлять все как одну команду. Это приведет к множеству синтаксических ошибок, таких как выше (извините, если вы уже знаете это, но мне потребовалось некоторое время, чтобы понять это!).

Другие вопросы по тегам