您不能一步完成ALTER TABLE
( DDL ) 和UPDATE
( DML )。
您将必须执行ALTER TABLE
,然后执行UPDATE
。
BEGIN
EXECUTE IMMEDIATE 'ALTER TABLE hierarchical ADD child_count INTEGER';
--
EXECUTE IMMEDIATE '
UPDATE hierarchical h
SET child_count = ( SELECT COUNT(*)
FROM hierarchical h2
WHERE h2.parent_id = h.id )';
END;
不过,在这样做之前要三思而后行。您现在可以轻松地找出是否id
有任何带有查询的孩子。
这将为您提供所有顶级节点的子数,例如:
SELECT h.id, h.name, COUNT(childs.id) child_count
FROM hierarchical h
LEFT JOIN hierarchical childs ON ( childs.parent_id = h.id )
WHERE h.parent_id IS NULL
GROUP BY h.id, h.name
添加带有冗余数据的额外列将使更改数据更加困难,因为在添加/删除子项时,您也必须始终更新父项。