create table SYS_ADMINISTRATIVE_ORGAN
(
administrative_organ_id NUMBER(9) not null,
administrative_organ_code VARCHAR2(10),
administrative_organ_name VARCHAR2(100),
remark VARCHAR2(200),
parent_id NUMBER(9),
syn_data_mark NUMBER(1)
)
-- Add comments to the table
comment on table SYS_ADMINISTRATIVE_ORGAN
is '行政区域表';
-- Add comments to the columns
comment on column SYS_ADMINISTRATIVE_ORGAN.administrative_organ_id
is '行政区域ID';
comment on column SYS_ADMINISTRATIVE_ORGAN.administrative_organ_code
is '行政区域代码';
comment on column SYS_ADMINISTRATIVE_ORGAN.administrative_organ_name
is '行政区域名称';
comment on column SYS_ADMINISTRATIVE_ORGAN.remark
is '描述';
comment on column SYS_ADMINISTRATIVE_ORGAN.parent_id
is '上级行政区域ID';
comment on column SYS_ADMINISTRATIVE_ORGAN.syn_data_mark
is '数据同步标志(1:不同步)';
--select * from SYS_ADMINISTRATIVE_ORGAN a where a.administrative_organ_name like '%山西%'
--select * from SYS_ADMINISTRATIVE_ORGAN a where a.parent_id=1
--select * from SYS_ADMINISTRATIVE_ORGAN a where a.administrative_organ_id=1
select Level ,
administrative_organ_id, a.parent_id, administrative_organ_name, lpad(' ', 8 * (Level - 1)) || administrative_organ_name as parentName
from SYS_ADMINISTRATIVE_ORGAN a
start with a.administrative_organ_id =1 connect by a.parent_id = prior a.administrative_organ_id
-- start with 语句表示树从什么位置开始进行检索
-- start with a.administrative_organ_id=1(从行政区划代码等于1的行政区划开始进行检索,即从“中华人民共和国”开始进行检索)
-- connect by语句在每行的行政区划前面加入空格
-- connect by语句表示当前数据行和下一行数据之间的关系。
-- prior 语句表示那个字段属于前一行(英文解释:优先的;在先的,在前的)
-- 如:connect by a.parent_id = prior a.administrative_organ_id;
-- 表示当前行的parent_id等于上一行的administrative_organ_id。