如何更新oracle中分层数据结构的所有子记录
How to update all children records of an hierarchical data structure in oracle
我在数据库中按层次顺序存储了类别和分组。每个类别都可能有其他类别和分组,因为它是子类别。因此,每当我将一个分组移动到另一个类别或分组下时,它的类别 ID 将被更新,所有它的子分组的类别 ID 也应该被更新。
GROUPINGtable有数据如下:
因此,如果我将分组 ID 81 移动到新类别 ID 739720,那么我希望所有子分组的类别 ID 也更新为 739720。
换句话说,我想 select 分层数据结构中一个分组的所有子记录并更新它们的类别 ID。
我希望更新后的数据如下所示。
您可以使用 MERGE
语句:
MERGE INTO GROUPING dst
USING (
SELECT ROWID AS rid
FROM GROUPING
START WITH grouping_id = 81
CONNECT BY PRIOR grouping_id = parent_id
) src
ON ( dst.ROWID = src.RID )
WHEN MATCHED THEN
UPDATE SET CATEGORY_ID = 739720;
我在数据库中按层次顺序存储了类别和分组。每个类别都可能有其他类别和分组,因为它是子类别。因此,每当我将一个分组移动到另一个类别或分组下时,它的类别 ID 将被更新,所有它的子分组的类别 ID 也应该被更新。
GROUPINGtable有数据如下:
因此,如果我将分组 ID 81 移动到新类别 ID 739720,那么我希望所有子分组的类别 ID 也更新为 739720。
换句话说,我想 select 分层数据结构中一个分组的所有子记录并更新它们的类别 ID。
我希望更新后的数据如下所示。
您可以使用 MERGE
语句:
MERGE INTO GROUPING dst
USING (
SELECT ROWID AS rid
FROM GROUPING
START WITH grouping_id = 81
CONNECT BY PRIOR grouping_id = parent_id
) src
ON ( dst.ROWID = src.RID )
WHEN MATCHED THEN
UPDATE SET CATEGORY_ID = 739720;