Oracle tree计算叶子节点到根节点的乘积


  1. //有下面一棵二叉树,转换为表结构:   
  2. parent_id  child_id  weight   
  3. ------     -------   ------   
  4. a          b              2    
  5. b          c              3   
  6. c          d              4   
  7. b          e              7   
  8. c          f              2   
  9. //计算叶子节点到根节点之间边的权值的乘积:   
  10. leaf weight   
  11. ---- ------   
  12. d        24   
  13. e        14   
  14. f        12   
  15. //数据   
  16. create table tree (parent_id varchar2(10),child_id varchar2(10),weight number(2));   
  17. insert into tree values('a','b',2);   
  18. insert into tree values('b','c',3);   
  19. insert into tree values('c','d',4);   
  20. insert into tree values('b','e',7);   
  21. insert into tree values('c','f',2);   
  22. //创建一个函数实现求字串乘积(动态SQL)   
  23. create or replace function func_tree(str in varchar2)   
  24. return number   
  25. as  
  26.   num number;   
  27. begin   
  28.      execute immediate 'select '||str||' from dual' into num;   
  29.      return num;   
  30. end func_tree;   
  31. //sql代码:   
  32. select child_id, func_tree(substr(sys_connect_by_path(weight, '*'), 2)) weight   
  33. from tree t   
  34. where connect_by_isleaf = 1   
  35. start with not exists (select 1 from tree where t.parent_id=child_id)   
  36. connect by prior child_id = parent_id   
  37. order by child_id;   
  38. //结果:   
  39. CHILD_ID       WEIGHT   
  40. ---------- ----------   
  41. d                  24   
  42. e                  14   
  43. f                  12  

相关内容