CREATE OR REPLACE FUNCTION getBlogsFromMostPopularTagsAndSite (
site_id INTEGER) RETURNS SETOF RECORD AS $$
DECLARE
tag_row RECORD;
blog_row RECORD;
BEGIN
-- requete de selection des tags
FOR tag_row IN
SELECT tag
FROM _freetag_blog
JOIN _freetagged_object_blog
ON (_freetag_blog.id = _freetagged_object_blog.tag_id)
WHERE _freetagged_object_blog.object_tree <@ '0.1'
AND (_freetag_blog.rating & (1 << (1 - 1))) = 0
AND (_freetagged_object_blog.rating & (1 << (1 - 1))) = 0
GROUP BY tag
ORDER BY COUNT (tag) DESC, tag ASC
OFFSET 0
LIMIT 10 LOOP
FOR blog_row IN
SELECT tag, _blog.id
FROM _blog
JOIN _freetagged_object_blog
ON (_blog.path = _freetagged_object_blog.object_tree)
JOIN _freetag_blog
ON (_freetag_blog.id = _freetagged_object_blog.tag_id)
LEFT JOIN _top_blog
ON (_blog.id = _top_blog.id )
WHERE _blog.path <@ '0.1'
AND (_blog.rating & (1 << (1 - 1))) = 0
GROUP BY _blog.id, tag, rank
HAVING tag = tag_row.tag
ORDER BY tag, rank DESC
OFFSET 0
LIMIT 5 LOOP
RETURN NEXT blog_row;
END LOOP;
END LOOP;
END;
$$ LANGUAGE plpgsql;
----------------
ob2=# SELECT * FROM getBlogsFromMostPopularTagsAndSite (1) AS (tag TEXT, id INT8);
ERROR: wrong record type supplied in RETURN NEXT
CONTEXT: PL/pgSQL function "getblogsfrommostpopulartagsandsite" line 38 at return next