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
OUT
có 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;