按for循环排序(SQL UDF)

时间:2013-02-14 07:24:24

标签: sql db2 user-defined-functions

我想使用SQL UDF聚合一些行。我想首先选择他们的id&然后在逗号分隔列中连接它们。我在函数中的order by子句有错误,因为它在for循环中。有没有办法在不删除order by子句的情况下运行它?我的数据库是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 个答案:

答案 0 :(得分:1)

这不起作用:

where recId=recId

DB2不会意识到您希望其中一个是函数参数而另一个是列名。它将对两者使用相同的一个,具有返回所有行的效果。您需要将函数参数命名为与列名不同的名称。

除此之外,类似于上面的代码对我来说很好。

你是新手写作的吗?一个常见的错误是将SQL编辑器的语句分隔符设置为;。这将使它尝试将函数分解为语句,而不是将整个事件作为单个命令发送。它会导致很多语法错误,如上所述(很抱歉,如果你已经知道了,但我花了一些时间才弄清楚!)。