91超碰碰碰碰久久久久久综合_超碰av人澡人澡人澡人澡人掠_国产黄大片在线观看画质优化_txt小说免费全本

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

mysql 存儲過程demo

發布時間:2020-07-30 18:17:19 來源:網絡 閱讀:329 作者:rumeng_you 欄目:MySQL數據庫

從沒寫過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
向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

贵阳市| 宜兰市| 靖远县| 日土县| 阳东县| 南城县| 盐津县| 环江| 塘沽区| 岳池县| 连山| 贵德县| 阿克| 保定市| 丰台区| 黄山市| 炎陵县| 临泽县| 名山县| 紫金县| 万源市| 滁州市| 大同县| 清远市| 嘉善县| 红河县| 光泽县| 房山区| 汉中市| 舟山市| 柏乡县| 康定县| 介休市| 阿坝县| 包头市| 资阳市| 阿荣旗| 恩平市| 青龙| 黄浦区| 郧西县|