CREATE OR REPLACE FUNCTION get_names(_tname varchar)
RETURNS TABLE (col_a integer, col_b text) AS
$func$
BEGIN
RETURN QUERY
SELECT t.col_a, t.col_b -- must match RETURNS TABLE
FROM mytable t
WHERE t.name = _tname;
END
$func$ LANGUAGE plpgsql;
このように電話してください:
SELECT * FROM get_names('name')
主なポイント:
-
RETURNS TABLE
を使用する 、したがって、呼び出しごとに列名のリストを提供する必要はありません。 -
RETURN QUERY
を使用する 、はるかに簡単です。 -
同じ名前の
OUT
との名前の競合を回避するために、列名をテーブル修飾します パラメータ(RETURNS TABLE
で宣言された列を含む 。 -
ALIAS
の代わりに名前付き変数を使用する 。よりシンプルで、同じことを行うのが好ましい方法です。 -
このような単純な関数は、
LANGUAGE sql
で記述することもできます。 :
CREATE OR REPLACE FUNCTION get_names(_tname varchar)
RETURNS TABLE (col_a integer, col_b text) AS
$func$
SELECT t.col_a, t.col_b --, more columns - must match RETURNS above
FROM mytable t
WHERE t.name = $1;
$func$ LANGUAGE sql;