1

SQL UDF を使用していくつかの行を集計したいと考えています。最初に ID で並べ替えられた行を選択し、それらをカンマ区切りの列に連結します。for ループ内にあるため、関数の order by 句でエラーが発生しています。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 は、これらのうちの 1 つを関数パラメーターにし、もう 1 つを列名にする必要があることを認識しません。両方に同じものを使用し、すべての行を返す効果があります。関数パラメーターに列名とは異なる名前を付ける必要があります。

それ以外は、上記のようなコードで問題なく動作します。

関数を書くのは初めてですか?よくある間違いの 1 つは、SQL エディターのステートメント区切り文字を に設定すること;です。これにより、全体を単一のコマンドとして送信するのではなく、関数をステートメントに分割しようとします。上記のような多くの構文エラーが発生します (すでに知っている場合は申し訳ありませんが、それを理解するのにしばらく時間がかかりました!)。

于 2013-02-15T08:24:53.660 に答える