1

私がこの関数を持っているとしましょうsp_func(startdate, enddate)。関数自体を呼び出すには、 を使用しますCALL sp_func(startdate, enddate);

この関数は、以下で構成されるテーブルを返します。

id   name      time
1    smith     3.2
2    neo       8.2
3    morpheus  2.4

私がやりたいことは、その関数からの時間を平均化することです。で試しましSELECT AVG(time) FROM sp_func(startdate, enddate)たが、うまくいきませんでした。構文エラーが発生しました。これの正確な構文が何であるかはわかりません。どんな助けでも大歓迎です。

4

1 に答える 1

0

魔法のキーワードはTABLE. ソリューションを示すスクリプトは次のとおりです。

ダミー手順

CREATE PROCEDURE sp_func(begin_date DATE, end_date DATE)
    RETURNING INTEGER AS id, VARCHAR(10) AS NAME, DECIMAL(5,2) AS TIME;

    RETURN 1, "smith",     3.2 WITH RESUME;
    RETURN 2, "neo",       8.2 WITH RESUME;
    RETURN 3, "morpheus",  2.4;

END PROCEDURE;

EXECUTE PROCEDURE sp_func('2012-01-01', '2012-12-31');

出力

1   smith      3.20
2   neo        8.20
3   morpheus   2.40

メインの SELECT ステートメント

SELECT AVG(a.TIME)
FROM TABLE(PROCEDURE sp_func('2012-01-01', '2012-12-31')) AS A(id, name, time)
;

出力

4.6

プロシージャーが戻り値に名前を付ける場合でも、列名を含む AS 句が必要でした。

この構文は、Informix Guide to SQL: Syntax マニュアルの第 2 章の SELECT ステートメントの下に記載されており、小見出しは「反復関数 (IDS)」です (11.70 の ids-sqs_bookmap.pdf のコピーの p2-638)。私が持っていること)。

于 2012-11-12T03:35:27.553 に答える