轉 mysql 存儲過程中使用遊標 的 幾種方法

mysql遊標循環的三種方式及打印結果查看

2017年03月14日 11:34:22 nannan1232 閱讀數:9325

1、while方式:

DELIMITER 
USE `ct1_test`
DROP PROCEDURE IF EXISTS `searchDate`
CREATE DEFINER=`greesj1b`@`%` PROCEDURE `searchDate`()
BEGIN
DECLARE tmpName VARCHAR(20) DEFAULT '' ;  
DECLARE temp_id VARCHAR(1024) DEFAULT '' ;  
DECLARE cur1 CURSOR FOR SELECT _id FROM `wp04_project` ORDER BY _id ASC LIMIT 5 ; 
DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = NULL; 
OPEN cur1;
FETCH cur1 INTO tmpName;
WHILE ( tmpname IS NOT NULL) DO 

/*自己的業務邏輯(我是把字符串相加)*/

SET tmpName = CONCAT(tmpName ," ") ; 
SET temp_id = CONCAT(temp_id ,tmpName) ; 
FETCH cur1 INTO tmpName;
END WHILE;
CLOSE cur1;
SELECT temp_id ;-- 打印結果
 END
DELIMITER ;

2、Repeat方式:

DELIMITER 
USE `ct1_test`
DROP PROCEDURE IF EXISTS `searchDate`
CREATE DEFINER=`greesj1b`@`%` PROCEDURE `searchRepeat`()
BEGIN
DECLARE done INT DEFAULT 0; 
 DECLARE a VARCHAR(200) DEFAULT '';
DECLARE temp_id VARCHAR(1024) DEFAULT '' ;  
DECLARE mycursor CURSOR FOR SELECT _id FROM `wp04_project` ORDER BY _id ASC LIMIT 5 ; 
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;
OPEN mycursor;
  REPEAT 
    FETCH mycursor INTO a;
     IF NOT done THEN
            SET temp_id=CONCAT(temp_id,a,' ');/*字符串相加,自己的業務邏輯*/
        END IF;
     UNTIL done END REPEAT;
CLOSE mycursor;
SELECT temp_id ;-- 打印結果
   END$$
DELIMITER ;

 

3、Loop方式:

DELIMITER 
USE `ct1_test`
DROP PROCEDURE IF EXISTS `searchLoop`
CREATE DEFINER=`greesj1b`@`%` PROCEDURE `searchLoop`()
BEGIN
DECLARE id INT;  
     DECLARE temp_id VARCHAR(1024) DEFAULT '' ;  
     DECLARE done INT DEFAULT 0;  
     DECLARE cur1 CURSOR FOR SELECT _id FROM `wp04_project` ORDER BY _id ASC LIMIT 5 ; 
     DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;  
     OPEN cur1;  
     emp_loop: LOOP  
         FETCH cur1 INTO id;  
         IF done=1 THEN  
            LEAVE emp_loop; 
         END IF;  
          SET temp_id=CONCAT(temp_id,id,' ');/*字符串相加,自己的業務邏輯*/       
     END LOOP emp_loop;  
     CLOSE cur1;  
   SELECT temp_id ;-- 打印結果
    END
DELIMITER ;

 

執行方法:CALL searchDate()

結果打印:100001 100002 100003 100004 100005 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章