程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> Oracle數據庫 >> Oracle教程 >> 利用oracle存儲過程生成樹編碼

利用oracle存儲過程生成樹編碼

編輯: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;


  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved