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;
Zadzwoń tak:
SELECT * FROM get_names('name')
Główne punkty:
-
Użyj
RETURNS TABLE
, więc nie musisz podawać listy nazw kolumn przy każdym wywołaniu. -
Użyj
RETURN QUERY
, znacznie prostsze. -
Kwalifikuj nazwy kolumn do tabeli, aby uniknąć konfliktów nazw z identycznie nazwanymi
OUT
parametry (w tym kolumny zadeklarowane za pomocąRETURNS TABLE
). -
Użyj nazwanej zmiennej zamiast
ALIAS
. Prościej, robiąc to samo i jest to preferowany sposób. -
Prostą funkcję taką jak ta można również napisać w
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;