您实际上 并 没有 返回 结果。您将为此使用
RETURN QUERY EXECUTE。
但是您不需要在这里以动态SQL开头…
CREATE OR REPLACe FUNCTION get_items_by_tag(VARIADIC tags text[]) RETURNS TABLE (id int, title text, tag text[]) AS$func$BEGIN IF array_length(tags, 1) > 0 THEN -- NO need for EXECUTE RETURN QUERY SELECT d.id, d.title, array_agg(t.title) FROM items d JOIN item_tags dt ON dt.item_id = d.id JOIN tags t ON t.id = dt.tag_id AND t.title = ANY ($1) -- use ANY construct GROUP BY d.id; -- PK covers whole table -- array_to_string(tags, ',') -- no need to convert array with ANY-- ELSE ... END IF;END$func$ LANGUAGE plpgsql;
用实际数组调用:
SELECt * FROM get_items_by_tag(VARIADIC '{tag1,tag2}'::text[]);或致电列出项目(“字典”):
SELECt * FROM get_items_by_tag('tag1', 'tag2');不知道为什么有
IF array_length(tags, 1) > 0 THEN,但是可能被完全取代
IF tags IS NOT NULLTHEN或根本没有
IF,然后跟进
IF NOT FOUND THEN。



