程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> Mysql創建遞歸型的存儲過程

Mysql創建遞歸型的存儲過程

編輯:MySQL綜合教程

Mysql創建遞歸型的存儲過程   第一步:SET max_sp_recursion_depth=12; 第二步:創建createChildDept過程 Sql代碼    www.2cto.com   DELIMITER $$      USE `zhiku`$$      DROP PROCEDURE IF EXISTS `createChildDept`$$      CREATE DEFINER=`root`@`%` PROCEDURE `createChildDept`(IN rootId INT,IN nDepth INT)   BEGIN       DECLARE done INT DEFAULT 0;       DECLARE b INT;       DECLARE cur1 CURSOR FOR SELECT id FROM zk_departments WHERE parent_id=rootId;       DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1;       INSERT INTO tmpLst VALUES (NULL,rootId,nDepth);       OPEN cur1;       FETCH cur1 INTO b;       WHILE done=0 DO           CALL createChildDept(b,nDepth+1);           FETCH cur1 INTO b;       END WHILE;       CLOSE cur1;       END$$      DELIMITER ;    第三步:創建showChildDept Sql代碼    www.2cto.com   DELIMITER $$      USE `zhiku`$$      DROP PROCEDURE IF EXISTS `showChildDept`$$      CREATE DEFINER=`root`@`%` PROCEDURE `showChildDept`(IN rootId INT)   BEGIN       CREATE TEMPORARY TABLE IF NOT EXISTS tmpLst       (sno INT PRIMARY KEY AUTO_INCREMENT,id INT,depth INT);       DELETE FROM tmpLst;       CALL createChildDept(rootId,0);       SELECT zk_departments.id,zk_departments.name FROM tmpLst,zk_departments WHERE tmpLst.id=zk_departments.id AND zk_departments.id>rootId ORDER BY tmpLst.sno;       #select zk_user_departments.dept_id,zk_user_departments.user_id from zk_user_departments left join tmpLst on tmpLst.id=zk_user_departments.dept_id and zk_user_departments.dept_id>rootId order by tmpLst.sno;       END$$      DELIMITER ;    第四步:CALL showChildDept(128)
 

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved