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
OUTparametry (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;