1

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

1 回答 1

1

这是行不通的:

where recId=recId

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

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

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

于 2013-02-15T08:24:53.660 回答