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;
Gọi như thế này:
SELECT * FROM get_names('name')
Điểm chính:
-
Sử dụng
RETURNS TABLE, vì vậy bạn không cần phải cung cấp danh sách tên cột cho mỗi lần gọi. -
Sử dụng
RETURN QUERY, đơn giản hơn nhiều. -
Tên cột đủ điều kiện trong bảng để tránh xung đột đặt tên với
OUTcó tên giống hệt nhau tham số (bao gồm các cột được khai báo bằngRETURNS TABLE). -
Sử dụng biến được đặt tên thay vì
ALIAS. Đơn giản hơn, làm theo cách tương tự và đó là cách ưu tiên. -
Một hàm đơn giản như thế này cũng có thể được viết bằng
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;