Oracle PL/SQL: Treeview 樹狀查詢

Oracle Database 本身也有提供 Treeview 樹狀查詢,

 語法
select col1, col2, ...
  from table
[where condition ...]
 start with 要放在最上層的條件
connect by [prior] Child_Column = Parent_Column
[order [siblings] by sort ...]

p.s. 若 prior 有提供,則會查詢出本階與其所有下階資料。
p.s. 若 prior 無提供,則只查詢出本階資料。
p.s. 若 siblings 有提供,則會按父子階層排序,再按指定欄位排序。
p.s. 若 siblings 無提供,則會按指定欄位排序。
p.s. Child_Column = Parent_Column,視為 "Child 的父階是哪個"。
p.s. 查詢會先按 start with 展開 Treeview,再過濾 where 條件。

 範例
-- 建立 Temp Table
create table tom_tree(
  tree_id    number
, parent_id  number
, tree_name  varchar2(30)
);

-- 新增資料
insert into tom_tree values( 0, null, 'top' );
insert into tom_tree values( 1, 0, '1' );
insert into tom_tree values( 2, 0, '2' );
insert into tom_tree values( 3, 1, '1_1' );
insert into tom_tree values( 4, 1, '1_2' );
insert into tom_tree values( 5, 2, '2_1' );
insert into tom_tree values( 6, 2, '2_2' );
insert into tom_tree values( 7, 2, '2_3' );
commit;

-- Treeview 查詢
select level
     , tree_name
     , lpad( ' ', (Level - 1) * 3, ' ') || tree_name  -- 增加這個欄位的顯示, 會有層次感
  from tom_tree
 start with parent_id is null
 connect by prior tree_id = parent_id;

這種 Treeview 查詢, 應用於 BOM 表查詢, 是非常方便的, 希望對各位有所幫助.

Related Posts Plugin for WordPress, Blogger...