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;