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;
Ring sådan her:
SELECT * FROM get_names('name')
Vigtigste punkter:
-
Brug
RETURNS TABLE
, så du behøver ikke at angive en liste over kolonnenavne ved hvert opkald. -
Brug
RETURN QUERY
, meget enklere. -
Tabelkvalificerer kolonnenavne for at undgå navnekonflikter med identisk navngivne
OUT
parametre (inklusive kolonner erklæret medRETURNS TABLE
). -
Brug en navngivet variabel i stedet for
ALIAS
. Enklere, gør det samme, og det er den foretrukne måde. -
En simpel funktion som denne kunne også skrives i
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;