(Всичко това е тествано с postgresql 8.3.7 - имате ли по-ранна версия? просто гледам как използвате "Псевдоним за $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
$$;
Ако имате запис или променлива на ред за връщане (вместо резултат от заявка), използвайте „RETURN NEXT“, а не „RETURN QUERY“.
За да извикате функцията, трябва да направите нещо като:
select * from storeopeninghours_tostring(1) f(a text, b text, c text);
Така че трябва да дефинирате какво очаквате схемата на изходния ред на функцията да бъде в заявката. За да избегнете това, можете да посочите изходни променливи в дефиницията на функцията:
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
$$;
(не съм съвсем сигурен защо са необходими допълнителните ::текстови предавания... '1' е varchar по подразбиране може би?)