9

国とその ISO 国コードのリストを含むテーブルがあるだけです。次のようなストアド プロシージャ (別名関数) でクエリをラップしています。

CREATE OR REPLACE FUNCTION get_countries(
                    ) RETURNS setof record AS $$
        SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;

私が得ているエラーは次のとおりです。

ERROR:  a column definition list is required for functions returning "record"

TYPE を定義してからカーソルのようにレコードセットをループできることはわかっていますが、IIRC には PostgreSQL の新しいバージョン (私は 8.4.3 を使用しています) でこれを行うためのより良い方法がありますが、試してみようとしています。覚えておいてください。


編集:

これは機能します:

CREATE OR REPLACE FUNCTION get_countries(
                    ) RETURNS setof country_codes AS $$
        SELECT country_code, country_name FROM country_codes
$$ LANGUAGE sql;

「[テーブル名] の RETURNS セット」に注意してください。しかし、それは最も柔軟ではないようです。複数のテーブルの結合を返そうとすると、バラバラになります。

4

2 に答える 2

11

次のように、出力パラメータを使用できるはずです。

CREATE OR REPLACE FUNCTION get_countries(country_code OUT text, country_name OUT text)
RETURNS setof record
AS $$ SELECT country_code, country_name FROM country_codes $$
LANGUAGE sql;
于 2010-01-10T10:13:26.613 に答える