如何更新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;