-- 如果上步游標操作沒有讀取到記錄,則done 會被設置為 TRUE,退出 名稱為myloop的循環 IF done THEN LEAVE tableloop; END IF;
-- 記錄當前記錄的區域編碼 SET buf_code = vcode;
-- 判斷自己是否是葉子節點 SELECT count(*) into var_count from adm_sys_area_info where parent = vcode;
if var_count = 0 then update adm_sys_area_info set tree_leaf = 1 where code = vcode; else update adm_sys_area_info set tree_leaf = 0 where code = vcode; end if;
set var_count = 0;
-- 循環查找自己的父節點 treeloop : LOOP
-- 判斷自己是否存在父節點,用count來判斷 SELECT count( * ) INTO var_count FROM adm_sys_area_info WHERE CODE = vparent;
IF var_count = 0 THEN -- 沒有上級節點了,則開始處理以前找到的父節點 IF buf_update THEN-- 更新緩存的數據 -- buf_update 為TRUE 則說明找到過父節點
-- 下面兩個記錄處理拼接的字符串末尾多的逗號的問題 IF ( length( buf_parents ) > 0 ) THEN
SET buf_parents = LEFT ( buf_parents, CHAR_LENGTH( buf_parents ) - 1 ); END IF; IF ( length( buf_names ) > 0 ) THEN
SET buf_names = LEFT ( buf_names, CHAR_LENGTH( buf_names ) - 1 ); END IF;
-- 更新當前節點的父信息 UPDATE adm_sys_area_info SET parents = buf_parents, tree_names = buf_names ,tree_level = buf_tree_level WHERE CODE = buf_code;
ELSE -- 當前記錄是根節點 update adm_sys_area_info set tree_level = 1 where code = buf_code; END IF;
-- 清理變量 SET buf_parents = ''; SET buf_names = ''; SET vparent = ''; SET buf_code = ''; SET buf_update = FALSE; SET buf_tree_level = 1;
-- 結束當前記錄的處理循環 LEAVE treeloop;
ELSE -- 查找到了父節點 SET buf_update = TRUE; -- 查詢當前節點的父節點信息 SELECT CODE, parent, area_name INTO var_code, var_pcode, var_name FROM adm_sys_area_info WHERE CODE = vparent;
-- 連接字符串 SET buf_parents = CONCAT_WS( ',', var_code, buf_parents ); SET buf_names = CONCAT_WS( ',', var_name, buf_names ); -- 記錄當前查找到記錄的父節點code SET vparent = var_pcode; SET buf_tree_level = buf_tree_level + 1;