第一步:Excel文件的形式如下
第二步:转换成树结构可选形式
第三步:具体怎么实现?
(1)、需要借助数据库中表来存储这些字段,一张表(aa)存Excel文件中的所有数据,一张作为处理表(bb)作为中转,把处理好的数据再放到存储表(aa)中。
(2)、具体操作
a、如果没有建表语句,那就从库中熟悉的表中来复制表结构;
sql
--4*2=8列表,字段长度足够就可以(这里是100),c表示code即id,n表示name即名称
create table aa as select casedjrxm c1,casedjrxm n1,casedjrxm c2,casedjrxm n2,casedjrxm c3,casedjrxm n3,casedjrxm c4,casedjrxm n4 from ywcl_case where 1=2;
--2列临时表
create table bb as select casedjrxm c,casedjrxm n from ywcl_case where 1=2;
b、直接使用建表语句
sql
CREATE TABLE "aa"
(
"c1" VARCHAR2(50),
"c2" VARCHAR2(50),
"c3" VARCHAR2(50),
"c4" VARCHAR2(50),
"c5" VARCHAR2(50),
"c6" VARCHAR2(50),
"n1" VARCHAR2(50),
"n2" VARCHAR2(50),
"n3" VARCHAR2(50),
"n4" VARCHAR2(50),
"n5" VARCHAR2(50),
"n6" VARCHAR2(50)) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "aa" IS 'aa';
CREATE TABLE "BB"
(
"id" VARCHAR2(50),
"c" VARCHAR2(50),
"n" VARCHAR2(50)) STORAGE(ON "MAIN", CLUSTERBTR) ;
COMMENT ON TABLE "BB" IS 'BB';
c、把Excel文件中的数据要插入到已经建好的表(aa)中
javascript
="insert into aa(n1,n2,n3,n4) values('"&A2&"','"&B2&"','"&C2&"','"&D2&"');"
以这种方式把Excel文件的数据全部获取到,然后在数据库中执行;
select * from aa;可以查询到已成功插入的全部数据。
d、对aa表中的数据进行处理,目前给到的数据只有文字,而没有编码的,所以需要给每一级都创建一个id。处理数据sql命令如下
一、处理第一级的父节点
sql
truncate table bb;
--一级插入临时表
insert into bb(n) select distinct n1 from aa;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c1=(select c from bb where n=n1);
commit;
二、处理第二、三、四级节点,有两种方式
sql
-----------方式1:不区分下级节点顺序-------
/*
delete from bb;
--二级插入临时表
insert into bb(n) select distinct n1||n2 from aa where n2 is not null;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c2=(select c from bb where n=n1||n2);
commit;
delete from bb;
--三级级插入临时表
insert into bb(n) select distinct n1||n2||n3 from aa where n3 is not null;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c3=(select c from bb where n=n1||n2||n3);
commit;
delete from bb;
--四级级插入临时表
insert into bb(n) select distinct n1||n2||n3||n4 from aa where n4 is not null;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c4=(select c from bb where n=n1||n2||n3||n4);
commit;
*/
-----------方式1:不区分下级节点顺序-------
sql
-----------方式2:区分下级节点顺序:即每个下级都是从001开始-------
begin
for t
in(select distinct n1 from aa where n2 is not null)
loop
delete from bb;
--二级插入临时表
insert into bb(n) select distinct n2 from aa where n1=t.n1;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c2=(select c from bb where n=n2) where n1=t.n1;
commit;
end loop;
end;
begin
for t
in(select distinct n1||n2 n1 from aa where n3 is not null)
loop
delete from bb;
--三级插入临时表
insert into bb(n) select distinct n3 from aa where n1||n2=t.n1;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c3=(select c from bb where n=n3) where n1||n2=t.n1;
commit;
end loop;
end;
begin
for t
in(select distinct n1||n2||n3 n1 from aa where n4 is not null)
loop
delete from bb;
--四级插入临时表
insert into bb(n) select distinct n4 from aa where n1||n2||n3=t.n1;
--以行数补齐3位做id
update bb set c=LPAD(rownum, 3, '0');
--回填
update aa set c4=(select c from bb where n=n4) where n1||n2||n3=t.n1;
commit;
end loop;
end;
-----------方式2:区分下级节点顺序:即每个下级都是从001开始-------
三、不管是使用哪种方式处理的数据最后得到的数据都有自己的id。
e、Excel所有数据已全部入库,那就需要处理成树结构的形式,树结构的形式js代码如下
javascript
{id:'001',pId:'-1',name:'新一代信息技术产业',allname:'新一代信息技术产业',"chkDisabled":true},
{id:'001001',pId:'001',name:'下一代信息网络产业',allname:'新一代信息技术产业->下一代信息网络产业',"chkDisabled":true},
{id:'001002',pId:'001',name:'电子核心产业',allname:'新一代信息技术产业->电子核心产业',"chkDisabled":true},
{id:'001003',pId:'001',name:'人工智能',allname:'新一代信息技术产业->人工智能',"chkDisabled":true},
{id:'001001001',pId:'001001',name:'网络设备制造',allname:'新一代信息技术产业->下一代信息网络产业->网络设备制造',"chkDisabled":false},
{id:'001001002',pId:'001001',name:'新型计算机及信息终端设备制造',allname:'新一代信息技术产业->下一代信息网络产业->新型计算机及信息终端设备制造',"chkDisabled":false},
{id:'001001003',pId:'001001',name:'信息安全设备制造',allname:'新一代信息技术产业->下一代信息网络产业->信息安全设备制造',"chkDisabled":false},
特别注意一下:"chkDisabled":flase表示的是最后一个节点 是可选的,如果是true,那说明有下一级节点,本节点不可选。
这种形式的格式怎么生成,看下面的sql
sql
---- 数据库操作完成后 要生成代码中识别的形式
select '{'||a||','||b||','||c||','||d||','||e||'},' from (
select distinct 'id:'||''''||c1||'''' a,'pId:'||''''||-1||'''' b,'name:'||''''||n1||'''' c,'allname:'||''''||n1||'''' d,'"chkDisabled":'||'true' e from aa
union all
select distinct 'id:'||''''||c1||c2||'''' a,'pId:'||''''||c1||'''' b,'name:'||''''||n2||'''' c,'allname:'||''''||n1||'->'||n2||'''' d,'"chkDisabled":'||'true' e from aa
union all
select distinct 'id:'||''''||c1||c2||c3||'''' a,'pId:'||''''||c1||c2||'''' b,'name:'||''''||n3||'''' c,'allname:'||''''||n1||'->'||n2||'->'||n3||'''' d,'"chkDisabled":'||'false' e from aa where n4 =''
union all
select distinct 'id:'||''''||c1||c2||c3||'''' a,'pId:'||''''||c1||c2||'''' b,'name:'||''''||n3||'''' c,'allname:'||''''||n1||'->'||n2||'->'||n3||'''' d,'"chkDisabled":'||'true' e from aa where n4 <>''
union all
select 'id:'||''''||c1||c2||c3||c4||'''' a,'pId:'||''''||c1||c2||c3||'''' b,'name:'||''''||n4||'''' c,'allname:'||''''||n1||'->'||n2||'->'||n3||'->'||n4||'''' d,'"chkDisabled":'||'false' e from aa where n4 <>''
order by b,a )
验证按照js中的形式来执行sql,sql中直接处理一对单引号括起来的值,在数据库中4个单引号才是一个单引号。