create or replace procedure createlayer
is
cursor treeParty is
select level,t.* from mytable t
start with t.id=46004 --父级id
connect by t.parent_id = prior t.id
order by level,t.id;
curLy mytable.layorder%type;
maxLy mytable.layorder%type;
parentLy mytable.layorder%type;
begin
for c_tree in treeParty loop
if c_tree.level = 1 then ---父级layorder
update mytable set layorder = '1001' where id=c_tree.id;
else
select layorder into parentLy
from mytable
where id = c_tree.parent_id;
select max(layorder) into maxLy
from mytable
where layorder like parentLy||'%';
if length(parentLy)=length(maxLy) then
curLy := parentLy||'0001';
else
curLy := substr(to_char(to_number('1'||maxLy)+1),2,length(maxLy)+1);
end if;
update mytable set layorder = curLy where id=c_tree.id;
end if;
end loop;
commit;
end;