Упорядочить в цикле 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 на ;
, Это заставит его попытаться разбить функцию на операторы, а не отправлять все как одну команду. Это приведет к множеству синтаксических ошибок, таких как выше (извините, если вы уже знаете это, но мне потребовалось некоторое время, чтобы понять это!).