行タイプの代わりに個々の列を取得するには、次のコマンドを使用して関数を呼び出します。
SELECT * FROM testfunction();
テーブルからすべての列を選択するのと同じように。
テスト関数のこのレビュー済みフォームも検討してください。
CREATE OR REPLACE FUNCTION testfunction()
RETURNS TABLE(a int, b int)
LANGUAGE plpgsql AS
$func$
DECLARE
_a int := 0;
_b int := 0;
BEGIN
CREATE TABLE tempTable AS SELECT _a, _b;
RETURN QUERY SELECT * FROM tempTable;
DROP TABLE tempTable;
END
$func$;
特に:
DECLARE
キーワードは一度だけ必要です。
すでに(暗黙的に)OUT
として宣言されているパラメータを宣言することは避けてください RETURNS TABLE (...)
のパラメータ 条項。
Postgresでは引用符で囲まれていないCaMeLケース識別子を使用しないでください。これは機能し、引用符で囲まれていない識別子は小文字にキャストされますが、混乱を招くエラーが発生する可能性があります。参照:
- PostgreSQLの列名では大文字と小文字が区別されますか?
この例の一時テーブルは完全に役に立たない(おそらく過度に単純化されている)。与えられた例は要約すると:
CREATE OR REPLACE FUNCTION testfunction(OUT a int, OUT b int)
LANGUAGE plpgsql AS
$func$
BEGIN
a := 0;
b := 0;
END
$func$;