Oracle 迭代查询, 以后台菜单作为示例
这是要准备的sql
1 create table tbl_menu( 2 id number primary key, 3 parent_id number default 0, 4 name varchar2(20) not null, 5 direntions clob, 6 info1 clob, 7 info2 clob, 8 info3 clob 9 ); 10 11 create sequence seq_tbl_menu; 12 13 insert into tbl_menu (id, name, direntions) values (seq_tbl_menu.nextval, '虚拟根目录', '所有菜单的虚拟根目录其他所有菜单都直接或间接的是它的子菜单'); 14 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 1, '权限管理'); 15 16 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 2, '资源管理'); 17 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 2, '角色管理'); 18 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 2, '用户管理'); 19 20 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 3, '菜单页面管理'); 21 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 3, '非菜单页面管理'); 22 23 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 4, '角色管理'); 24 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 4, '角色权限'); 25 26 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 5, '用户管理'); 27 insert into tbl_menu (id, parent_id, name) values (seq_tbl_menu.nextval, 5, '用户权限');
这是查询的sql
1 select 2 id, 3 parent_id, 4 case 5 when parent_id = 0 then '------'||name 6 when parent_id = 1 then '------------'||name 7 when parent_id != 1 or parent_id != 0 then '------------------------'||name 8 else name end 9 from tbl_menu 10 start with id = 1 11 connect by prior id = parent_id 12 order by id
这是效果
ID PARENT_ID CASEWHENPARENT_ID=0THEN'------
1 0 ------虚拟根目录
2 1 ------------权限管理
3 2 ------------------------资源管理
4 2 ------------------------角色管理
5 2 ------------------------用户管理
6 3 ------------------------菜单页面管理
7 3 ------------------------非菜单页面管理
8 4 ------------------------角色管理
9 4 ------------------------角色权限
10 5 ------------------------用户管理
11 5 ------------------------用户权限