我想使用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