0

日付列 (年、月、日、および「スタンプ」と呼ばれる 3 つの組み合わせ) と関連する値 (avalue) を持つ 2 つのテーブルがあります。(指定された日付で) 2 つのテーブル間の比率を返し、以前に指定された制限日の後に固定値を返す関数が必要です。入力に続いて最初に利用可能な日付を選択する必要があります。

ここに私が書いたコードがあります:

CREATE OR REPLACE FUNCTION myfunction(theyear int, themonth int, theday int) RETURNS real AS '
    DECLARE
        foo tablenamea%rowtype;
    BEGIN
        IF ((theyear >= 2000) AND (themonth >= 6)) OR (theyear > 2000) THEN
            RETURN 0.1;
        ELSE 
            FOR foo IN SELECT (a.avalue/b.avalue) FROM tablenamea AS a, tablenameb AS b
            WHERE a.stamp = b.stamp AND a.year = theyear AND a.month = themonth AND a.day >= theday ORDER BY a.year, a.month, a.day
            LOOP
                RETURN NEXT foo;
            END LOOP;
            RETURN;
        END IF;
    END;
' LANGUAGE plpgsql;

これは私にこのエラーを与え続けます:

cannot use RETURN NEXT in a non-SETOF function
4

1 に答える 1

1

foo (行) ではなく、実数を返す必要があることを示しています。

おそらくfoo.somefield代わりに戻ってきます。

また、ループのlimit 1代わりに a を追加します。これは、最初の行だけに本当に関心があると思われるためです。forそうでない場合は、 eg を返すものとして宣言し、table (ratio real)を使用しますreturn query

于 2013-07-10T12:27:16.997 に答える