(Tất cả điều này đều được thử nghiệm với postgresql 8.3.7-- bạn có phiên bản cũ hơn không? Chỉ cần xem xét việc bạn sử dụng "ALIAS FOR $ 1")
CREATE OR REPLACE FUNCTION storeopeninghours_tostring(numeric)
RETURNS SETOF RECORD AS $$
DECLARE
open_id ALIAS FOR $1;
result RECORD;
BEGIN
RETURN QUERY SELECT '1', '2', '3';
RETURN QUERY SELECT '3', '4', '5';
RETURN QUERY SELECT '3', '4', '5';
END
$$;
Nếu bạn có biến bản ghi hoặc biến hàng cần trả về (thay vì kết quả truy vấn), hãy sử dụng "QUAY LẠI TIẾP THEO" thay vì "QUAY LẠI QUERY".
Để gọi hàm, bạn cần thực hiện một số việc như:
select * from storeopeninghours_tostring(1) f(a text, b text, c text);
Vì vậy, bạn phải xác định những gì bạn mong đợi lược đồ hàng đầu ra của hàm sẽ có trong truy vấn. Để tránh điều đó, bạn có thể chỉ định các biến đầu ra trong định nghĩa hàm:
CREATE OR REPLACE FUNCTION storeopeninghours_tostring(open_id numeric, a OUT text, b OUT text, c OUT text)
RETURNS SETOF RECORD LANGUAGE 'plpgsql' STABLE STRICT AS $$
BEGIN
RETURN QUERY SELECT '1'::text, '2'::text, '3'::text;
RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
RETURN QUERY SELECT '3'::text, '4'::text, '5'::text;
END
$$;
(không chắc tại sao bổ sung ::phôi văn bản lại được yêu cầu ... '1' có thể là một varchar theo mặc định?)