声明:对于游标,我也没有咋用过,有些东西也不是很理解。这里给大家拷贝过来一个简单的demo。我加里一些注释。希望对你们学习有帮助!!

 

 


  1. 1.游标:游标是用于在存储过程中迭代SELECT查询出的数据。 
  2.  
  3. 2.游标的使用步骤: 
  4.  
  5. ①:声明:DECLARE  ordernums CURSOR fro SELECT order_num FROM orders; 
  6. (说明: 
  7. <1>.使用DECLARE定义游标语句必须定义在变量语句之后。 
  8. <2>.ordernums是表示游标名。 
  9. <3>.cursor是表示游标。 
  10.  
  11. ②:打开游标。OPEN ordernums; 
  12.  
  13. ③:关闭游标。CLOSE ordernums; 
  14.  
  15.  
  16.  
  17. 3.举个例子: 
  18.  
  19. DELIMITER // 
  20. CREATE PROCEDURE processorders()  /*定义存储过程*/ 
  21. BEGIN 
  22. DECLARE done BOOLEAN; /*定义一个变量*/ 
  23. DECLARE num INT; /*定义一个变量*/ 
  24. DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; /*定义游标;必须定义在变量之后!*/ 
  25. DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; /*定义句柄。continue设定循环退出条件。*/ 
  26. /*当sqlstate为’02000‘时,设置done的值为1,02000是指一个没有找到的错误码*/ 
  27. /*sqlstate是mysql的规定。表示找到最后无数据时,mysql报出的状态码!!*/ 
  28. OPEN ordernumbers; /*打开游标*/ 
  29. REPEAT /*循环开始*/ 
  30. FETCH ordernumbers INTO num; /*获取一行一列的数据*/ 
  31. INSERT INTO t_table(val) VALUES(num); /*插入到t_table表中*/ 
  32. UNTIL done END REPEAT; /*类似于java中的do...while循环*/ 
  33. CLOSE ordernumbers ; /*关闭游标*/ 
  34. END // 
  35. DELIMITER ; 
  36.  
  37. /*调用游标:*/ 
  38. CALL processorders(); 
  39.  
  40. 4.多列游标的声明: 
  41. DECLARE ordernumbers CURSOR FOR SELECT order_num,cust_id FROM orders; 
  42. 对应的FETCH的用法:FETCH ordernumbers INTO num,id;