程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 數據庫知識 >> MYSQL數據庫 >> MySQL綜合教程 >> MySQL 游標的具體使用方案

MySQL 游標的具體使用方案

編輯:MySQL綜合教程

以下的文章主要描述的是MySQL 游標的具體使用方案,如果你對MySQL 游標的實際操作有興趣的話,你就可以對以下的文章點擊觀看了,希望在你浏覽之後會給你帶來一些幫助在此方面。

請使用 MySQL 1.5 或以上version;

測試表 level ;

  1. create table test.level (name varchar(20)); 

再 insert 些數據 ;

代碼

初始化

drop procedure if exists useCursor //

建立 存儲過程 create

CREATE PROCEDURE useCursor()

BEGIN

局部變量的定義 declare

  1. declare tmpName varchar(20) default '' ;  
  2. declare allName varchar(255) default '' ;  
  3. declare cur1 CURSOR FOR SELECT name FROM test.level ;  

MySQL 不知道為什麼用異常加入判斷 ?

此請參考官方文檔 20.2.11. 光標 光標

這把 MySQL 游標 異常後 捕捉

並設置 循環使用 變量 tmpname 為 null 跳出循環。

  1. declare CONTINUE HANDLER FOR SQLSTATE '02000' SET tmpname = null; 

開游標

OPEN cur1;

游標向下走一步

  1. FETCH cur1 INTO tmpName; 

循環體 這很明顯 把MySQL 游標查詢出的 name 都加起並用 ; 號隔開

  1. WHILE ( tmpname is not null) DO  
  2. set tmpName = CONCAT(tmpName ,";") ;  
  3. set allName = CONCAT(allName ,tmpName) ;  

游標向下走一步

  1. FETCH cur1 INTO tmpName;  
  2. END WHILE;  
  3. CLOSE cur1;  
  4. select allName ;  
  5. END;//  
  6. call useCursor()//  

運行結果:

代碼

  1. MySQL> call useCursor()//  
  2. +--------------------------------------+  
  3. | allName |  
  4. +--------------------------------------+  
  5. | f1;c3;c6;c5;c2;c4;c1;f1;f3;f4;f2;f5; |  
  6. +--------------------------------------+  
  7. 1 row in set (0.00 sec)  

代碼

  1. DELIMITER $$   
  2. DROP PROCEDURE IF EXITS cursor_example$$   
  3. CREATE PROCEDURE cursor_example()   
  4. READS SQL DATA   
  5. BEGIN   
  6. DECLARE l_employee_id INT;   
  7. DECLARE l_salary NUMERIC(8,2);   
  8. DECLARE l_department_id INT;   
  9. DECLARE done INT DEFAULT 0;   
  10. DECLARE cur1 CURSOR FOR SELECT employee_id, salary, department_id FROM employees;   
  11. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;   
  12. OPEN cur1;   
  13. emp_loop: LOOP   
  14. FETCH cur1 INTO l_employee_id, l_salary, l_department_id;   
  15. IF done=1 THEN   
  16. LEAVE emp_loop;   
  17. END IF;   
  18. END LOOP emp_loop;   
  19. CLOSE cur1;   
  20. END$$   
  21. DELIMITER ;   

代碼

創建過程

  1. DELIMITER //  
  2. DROP PROCEDURE IF EXISTS test //  
  3. CREATE PROCEDURE test()  
  4. BEGIN  
  5. DECLARE done INT DEFAULT 0;  
  6. DECLARE a VARCHAR(200) DEFAULT '';  
  7. DECLARE c VARCHAR(200) DEFAULT '';  
  8. DECLARE mycursor CURSOR FOR SELECT fusername FROM uchome_friend;  
  9. DECLARE CONTINUE HANDLER FOR NOT FOUND SET done=1;  
  10. OPEN mycursor;  
  11. REPEAT   
  12. FETCH mycursor INTO a;  
  13. IF NOT done THEN  
  14. SET c=CONCAT(c,a); 

字符串相加

  1. END IF;  
  2. UNTIL done END REPEAT;  
  3. CLOSE mycursor;  
  4. SELECT c;  
  5. END //  
  6. DELIMITER ; 

以上的相關內容就是對MySQL 游標使用的介紹,望你能有所收獲。

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