插入时生成的分层生成树代码

时间:2015-07-30 08:15:46

标签: oracle join tree hierarchical-data

http://i.stack.imgur.com/weX9W.jpg

在我的表中的每个插入,我想基于我插入的对象的父代码生成此代码(1,1.1,1.2 ......)。

我的方法是这样的: - 创建一些将以某种方式生成此代码的SQL函数,并且将通过触发器在我的表中的每个插入中调用它。

在字符串解析方面遇到了一些困难,那么您认为这将是最佳解决方案?感谢。

1 个答案:

答案 0 :(得分:0)

你可以找到父对象,让我们说它的代码是1.3然后用相同的父对象计算兄弟姐妹行,假设你找到了2个兄弟。 所以你的新代码值是1.3.3。但是这种方法需要从触发器工作的同一个表中进行选择。 当你在时间插入几行时,这可能会导致“ORA-04091:表名发生变异,触发器/函数可能看不到它”。 有workarounds可以避免这种情况。

另一种方法是使用基于此查询的视图,而不是触发器:

select id, pid, ltrim(sys_connect_by_path(rn, '.'),'.') code
  from (
    select id, pid, 
           row_number() over (partition by level, pid order by seq) rn
      from data connect by pid = prior id
      start with pid is null )
  connect by pid = prior id
  start with pid is null

SQLFiddle demo

它要求您的表包含列seq,允许正确排序行。