PLSQL-从树数据结构中删除根

时间:2019-02-01 07:47:58

标签: oracle plsql

我有两个表:“产品”和“产品组”。

仅当后者包含最多一个子组时,才允许删除层次结构的根。在这种情况下,子组成为层次结构的根。先前分配给已删除的根的所有产品都分配给层次结构的新根。

不允许删除最后一个分配产品的组。

我该如何实现?

create or replace procedure pDeleteProductGroup(p_code VARCHAR2) IS
v_var "ProductGroups"."code"%type;
begin
select func_parent(p_code) into v_var
from "ProductGroups"
where "code"=p_code;

update "ProductGroups" 
set "parentCode"=v_var
where "code"=p_code;

update "Products" 
set "groupCode"=v_var
where "groupCode"=p_code;
end;

create or replace FUNCTION func_parent (p_groupCode VARCHAR2)
  RETURN VARCHAR2
  IS
  v_var "ProductGroups"."parentCode"%type;
  BEGIN
  select "parentCode" into v_var from "ProductGroups"
  where p_groupCode="code";

  if v_var is null
  then v_var:=null;

  end if;

  return v_var;

  END;

1 个答案:

答案 0 :(得分:0)

如果我对您的理解正确,则除了

,您无需做任何特殊的操作
  • 删除根节点
  • 更新新的根节点的行并将其PARENT ID设置为NULL(因为它现在是 root ,对)?

如果这不是您要的内容,请提供测试用例并说明您要执行的操作以及要获得的结果。