Skynet

          ---------- ---------- 我的新 blog : liukaiyi.cublog.cn ---------- ----------

            BlogJava :: 首頁 :: 聯系 :: 聚合  :: 管理
            112 Posts :: 1 Stories :: 49 Comments :: 0 Trackbacks

          就用數據數據庫表地址數據(中國地區) 來說吧(用Windows 請使用 gbk !!)

          可直接運行(去除注解)

          存儲過程:

          DELIMITER //
          drop procedure if exists  findLChild//
          /* iid 遞歸父節點 , layer 允許遞歸深度 */

          CREATE PROCEDURE findLChild(iid bigint(20),layer bigint(20))
           
          BEGIN
             
          /*創建接受查詢的臨時表 */
              
          create temporary  table if not exists tmp_table(id bigint(20),name varchar(50)) ENGINE=InnoDB DEFAULT CHARSET=utf8;
              
          /*最高允許遞歸數*/
             
          SET @@max_sp_recursion_depth = 99 ;
              call iterative(iid,layer);
          /*核心數據收集*/
             
          select * from tmp_table ;/* 展現 */
              
          drop temporary  table if  exists  tmp_table ;/*刪除臨時表*/
            
          END;//
          DELIMITER ;

          DELIMITER 
          //
          drop procedure if exists  iterative //
          CREATE PROCEDURE iterative(iid bigint(20),layer bigint(20))
              
          BEGIN
                   
          declare tid bigint(20default -1 ;
                   
          declare tname varchar(50character set utf8;

                   
          /* 游標定義 */
                   
          declare cur1 CURSOR FOR select id,name from location where fid=iid ;
                   
          declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tid = null;
                
                
          /* 允許遞歸深度 */
                
          if layer>0 then
                   
          OPEN cur1 ;
                   
          FETCH cur1 INTO tid,tname ;
                     
          WHILE ( tid is not null ) 
                       DO
                        
          /* 核心數據收集 */
                     
          insert into tmp_table values(tid,tname);
                        call iterative(tid,layer
          -1);
                        
          FETCH cur1 INTO tid,tname ;
                     
          END WHILE;
                 
          end if;
              
          END;//
          DELIMITER ;

          //運行!!

          mysql> call findLChild(1,1);
          +------+------------------+
          | id   | name             |
          +------+------------------+
          |    2 | 北京             |
          |    4 | 上海             |
          |    6 | 香港特別行政區   |
          |    8 | 澳門特別行政區   |
          |   10 | 河北             |
          |   23 | 山西             |
          |   35 | 遼寧             |
          |   50 | 吉林             |
          |   60 | 黑龍江           |
          |   74 | 江蘇             |
          |   88 | 浙江             |
          |  101 | 安徽             |
          |  119 | 福建             |
          |  129 | 江西             |
          |  142 | 山東             |
          |  160 | 河南             |
          |  179 | 湖北             |
          |  198 | 湖南             |
          |  213 | 廣東             |
          |  235 | 甘肅             |
          |  250 | 四川             |
          |  272 | 貴州             |
          |  282 | 海南             |
          |  301 | 云南             |
          |  318 | 青海             |
          |  327 | 陜西             |
          |  348 | 廣西壯族自治區   |
          |  363 | 西藏自治區       |
          |  371 | 寧夏回族自治區   |
          |  377 | 新疆維吾爾自治區 |
          |  400 | 內蒙古自治區     |
          |  413 | 臺灣省           |
          +------+------------------+
          32 rows in set (0.02 sec)






          整理 www.aygfsteel.com/Good-Game
          posted on 2008-10-01 17:19 劉凱毅 閱讀(4077) 評論(0)  編輯  收藏 所屬分類: database
          主站蜘蛛池模板: 都江堰市| 灵宝市| 乌兰浩特市| 麻江县| 遂川县| 邵东县| 广宁县| 时尚| 前郭尔| 和田市| 永顺县| 丰县| 龙陵县| 泰宁县| 松桃| 苏州市| 丹棱县| 阜新| 宁德市| 龙海市| 普宁市| 康平县| 嫩江县| 桂东县| 乐都县| 巴马| 前郭尔| 屏东市| 富川| 丰台区| 洪洞县| 巴林左旗| 徐州市| 长汀县| 苏尼特左旗| 安康市| 大埔县| 枣强县| 尉犁县| 抚州市| 孟村|