Como posso fatorar a instrução SELECT comum na função a seguir?
CREATE OR REPLACE PROCEDURE delete_comment(cid integer[]) AS $$
BEGIN
DELETE FROM comment_tree_path
WHERE descendant IN (SELECT descendant
FROM comment_tree_path
WHERE ancestor = ANY(cid));
DELETE FROM comment
WHERE comment_id IN (SELECT descendant
FROM comment_tree_path
WHERE ancestor = ANY(cid));
END;
$$ LANGUAGE plpgsql;
Você também pode usar um CTE:
Use
SELECT array_agg(...) INTO
para obter a lista de alvos em uma variável de array local e, em seguida, passe isso como um parâmetro para o seuDELETE
s usando= ANY
: