私は動的にSELECTを生成しました。私は結果をSETOF RECORDとして返そうとします。Postgres 9.1 SETOFレコードのタイプ
CREATE FUNCTION test(column_name text) RETURNS SETOF RECORD AS $$
DECLARE
row RECORD;
BEGIN
FOR row IN EXECUTE 'SELECT ' || quote_ident(column_name) || ' FROM dates'
LOOP
RETURN NEXT row;
END LOOP;
RETURN;
END;
$$ LANGUAGE 'plpgsql';
私は試してみてください:そのようなSTH
SELECT * FROM test('column1');
私はこれを取得:
ERROR: a column definition list is required for functions returning "record"
私はカラム1が整数型であることを知っている:
SELECT * FROM test('column1') f(a int);
結果はこれはInteger typとなることがわかっているからですe。
私は試してみてください。
SELECT * FROM test('column1') f(a varchar);
私はエラーを取得する:
ERROR: wrong record type supplied in RETURN NEXT
DETAIL: Returned type integer does not match expected type character varying in column 1.
今、私の質問: 私はタイプF」(int型を定義QUERTYの一部を取り除くために何をします) '。 Postgresは何が返されるかを知っているので、実行可能でなければなりません。 IMMUTABLEオプションを試しましたが、失敗しました。
はどのように最初の ''でint'ことができcolumn1'例と2番目の例で 'varchar'ですか? –
それはありませんが、私はポストグルが返品の種類を知っていることを示したかったのです。 – zie1ony
あなたがしていることは、 'select column1 from dates'とまったく同じようです。テーブルから1つの列だけを返す関数が必要なのはなぜですか?あなたが解決しようとしている問題は何ですか? –