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

2021-12-30 12:23:25 字數 1541 閱讀 5977

字段

描述

備註

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樹的儲存過程

來自網上 第一步 建立表 it create table it id number primary key,cont varchar2 255 pid number isleaf number 1 0代表非葉子節點 1代表葉子節點。grade number 2 第二步 向資料中插入資料並提交事務 i...

oracle儲存過程生成xml檔案

oracle儲存過程生成xml檔案 create or replace procedure pro oracletoxml personid varchar2,name varchar2,address varchar2,tel varchar2,ip varchar2,email varchar2...

Oracle儲存過程呼叫儲存過程

oracle儲存過程呼叫有返回結果集的儲存過程一般用光標的方式,宣告乙個游標,把結果集放到游標裡面,然後迴圈游標 declare newcs sys refcursor cs1 number cs2 number cstype table rowtype table列的個數和newcs返回的個數一樣...