我想使用SQL UDF來聚合一些行。我想先選擇按其編號&排序的行,然後將它們連接在逗號分隔的列中。我的函數中的order by子句出現錯誤,因爲它在for循環中。有沒有辦法在不刪除order by子句的情況下運行此操作?我的數據庫是DB2in for循環排序(SQL UDF)
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.
...爲什麼你想要這個作爲分隔列?大多數類型的格式化應該在應用程序層完成。什麼版本的DB2?而且,一般來說SQL不應該與循環一起使用,因爲大多數引擎並沒有被寫成用這些術語來「思考」。而「歐元」是一個'模棱兩可'的格式,在那個月/日可能會出現逆轉(特別是使用'標準'分隔符時)。如果我看到這個輸出,我可能會假設USA格式的日期!請注意,這可以通過使用遞歸CTE,但我不知道它應該是... – 2013-02-14 18:54:24
@ Clockwork-Muse感謝您的詳細回覆,我同意你不使用循環,但它是一個愚蠢的需求。這個要求是針對一個報告,我必須顯示查詢已經返回的每一行數據的日期。我已用歐元格式化日期,格式爲日/月/年(格式)(默認情況下,它們以yyyy/dd/MM存儲在數據庫中)。 – 2013-02-15 04:49:50
@ Clockwork-Muse關於遞歸,我不想使用遞歸,因爲它很容易出錯。我也不知道遞歸sql語句的最大級別。 – 2013-02-15 04:51:57