利用oracle存儲過程生成樹編碼
來源:程序員人生 發布時間:2014-12-09 08:38:39 閱讀次數:3885次
利用oracle存儲進程生成樹編碼
需求
字段
|
描寫
|
備注
|
ID
|
主鍵,32位UUID
|
|
TYPE_CODE
|
編碼
|
如:1-01-003
|
PARENT_ID
|
父節點ID,32位UUID
|
|
SORT_NUM
|
排序編號
|
正整數
|
假定頂級節點的TYPE_CODE為字符1,寫存儲進程把表中所有的節點TYPE_CODE生成好;
2級節點前面補1個齡,3級補兩個零,順次類推;
實現關鍵點
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;
生活不易,碼農辛苦
如果您覺得本網站對您的學習有所幫助,可以手機掃描二維碼進行捐贈