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;
Llame así:
SELECT * FROM get_names('name')
Puntos principales:
-
Usar
RETURNS TABLE
, por lo que no tiene que proporcionar una lista de nombres de columna con cada llamada. -
Utilice
RETURN QUERY
, mucho más sencillo. -
Nombres de columna de calificación de tabla para evitar conflictos de nombres con
OUT
con nombres idénticos parámetros (incluidas las columnas declaradas conRETURNS TABLE
). -
Use una variable con nombre en lugar de
ALIAS
. Más simple, haciendo lo mismo, y es la forma preferida. -
Una función simple como esta también podría escribirse en
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;