国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 數據庫 > MySQL > 正文

mysql 存儲步驟demo

2024-07-24 12:36:02
字體:
來源:轉載
供稿:網友

      從沒寫過mysql 存儲過程,靠著百度和以前寫oracle存儲過程的經驗寫了一個,還算順利,留個例子吧
 
CREATE DEFINER=`west_brain`@`%` PROCEDURE `man_tree_area`( )
BEGIN
  -- 存儲樹狀結果處理sql變量
    DECLARE
        var_code VARCHAR ( 1000 );
    DECLARE
        var_pcode VARCHAR ( 1000 );
    DECLARE
        var_name VARCHAR ( 1000 );
    DECLARE
        var_count INT;
 
    -- 存儲的一些標記變量    
    DECLARE
        buf_parents VARCHAR ( 1000 ) DEFAULT '';
    DECLARE
        buf_names VARCHAR ( 1000 ) DEFAULT '';
    DECLARE
        buf_code VARCHAR ( 100 ) DEFAULT '';
    DECLARE
        buf_update INT DEFAULT FALSE;
    DECLARE
      buf_is_leaf INT DEFAULT 0;
 
    -- 樹級別 根為1
    DECLARE
      buf_tree_level int DEFAULT 0;
    -- 是否葉子節點 0 非 1是
    DECLARE
      buf_tree_leaf int DEFAULT 1;
 
    -- 存儲表循環游標的變量
    DECLARE
        vcode VARCHAR ( 64 );
    DECLARE
        vparent VARCHAR ( 1000 );
 
    -- 游標結束的處理變量
    DECLARE
        done INT DEFAULT FALSE;
 
    -- 定義表循環游標
    DECLARE
        mycursor CURSOR FOR ( SELECT CODE, parent FROM adm_sys_area_info );
 
    -- 定義游標溢出的處理操作
    DECLARE
        CONTINUE HANDLER FOR NOT FOUND
        SET done = TRUE;
 
    -- 打開游標
    OPEN mycursor;
 
    -- 定義游標循環
    tableloop :
    LOOP
        -- 讀取游標的一條數據到變量里
            FETCH mycursor INTO vcode,
            vparent;
 
        -- 如果上步游標操作沒有讀取到記錄,則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;
 
            END IF;
 
        END LOOP;
 
    END LOOP;
    CLOSE mycursor;
 
END

(編輯:武林網)

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
主站蜘蛛池模板: 木兰县| 商城县| 阿坝县| 明溪县| 灵武市| 庆城县| 营口市| 马尔康县| 梁山县| 平泉县| 宁海县| 冷水江市| 广灵县| 洮南市| 乾安县| 台湾省| 龙山县| 兴海县| 留坝县| 南丰县| 洪江市| 财经| 睢宁县| 汽车| 日土县| 米泉市| 晋中市| 筠连县| 越西县| 疏勒县| 神农架林区| 东港市| 兰考县| 寿光市| 昭平县| 红原县| 保靖县| 都安| 溧阳市| 三明市| 东源县|