首页 > 代码库 > 利用oracle存储过程生成树代码
利用oracle存储过程生成树代码
利用oracle存储过程生成树编码
需求
字段 | 描述 | 备注 |
ID | 主键,32位UUID |
|
TYPE_CODE | 编码 | 如:1-01-003 |
PARENT_ID | 父节点ID,32位UUID |
|
SORT_NUM | 排序编号 | 正整数 |
假设顶级节点的TYPE_CODE为字符1,写存储过程把表中所有的节点TYPE_CODE生成好;
二级节点前面补一个龄,三级补两个零,依次类推;
实现关键点
n 不知道系统有多少级,需要递归调用
通过递归调用自身;
n 如果动态在TYPE_CODE前面填充0;通过计算‘-’的个数来确定层级
tree_level:= (length(p_code)-length(replace(p_code,‘-‘,‘‘))) + 1;
n 前面填充前缀0
lpad(to_char(cnt),tree_level,‘0‘)
存储过程代码
CREATEOR REPLACE PROCEDURE INI_TREE_CODE ( V_PARENT_ID IN VARCHAR2 )AS p_id varchar2(32); p_code varchar2(256); sub_num number(4,0); tree_level number(4,0); cnt number(4,0) default 0; cursor treeCur(oid varchar2) is select id,TYPE_CODE from eval_index_type where parent_id = oid order by sort_num; BEGIN sub_num := 0; select id,type_code into p_id,p_code from eval_index_type where id = V_PARENT_ID order by sort_num; for curRow in treeCur(p_id) loop cnt := cnt +1; tree_level :=(length(p_code)-length(replace(p_code,'-',''))) + 1; update eval_index_type set type_code =p_code || '-' || lpad(to_char(cnt) ,tree_level,'0') where id = curRow.id; select COUNT(*) into sub_num fromeval_index_type where parent_id = p_id; if sub_num > 0 then INI_TREE_CODE (curRow.id); end if; end loop; ENDINI_TREE_CODE;
利用oracle存储过程生成树代码
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。