ALTER TABLE
( DDL ) とUPDATE
( DML ) を 1 つのステップで実行することはできません。
を実行し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
冗長データを含む余分な列を追加すると、子を追加/削除するときに常に親も更新する必要があるため、データの変更がより困難になります。