天天看点

mysql总结8----游标的学习

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

1.游标:游标是用于在存储过程中迭代SELECT查询出的数据。 

2.游标的使用步骤: 

①:声明:DECLARE  ordernums CURSOR fro SELECT order_num FROM orders; 

(说明: 

<1>.使用DECLARE定义游标语句必须定义在变量语句之后。 

<2>.ordernums是表示游标名。 

<3>.cursor是表示游标。 

②:打开游标。OPEN ordernums; 

③:关闭游标。CLOSE ordernums; 

3.举个例子: 

DELIMITER // 

CREATE PROCEDURE processorders()  /*定义存储过程*/ 

BEGIN 

DECLARE done BOOLEAN; /*定义一个变量*/ 

DECLARE num INT; /*定义一个变量*/ 

DECLARE ordernumbers CURSOR FOR SELECT order_num FROM orders; /*定义游标;必须定义在变量之后!*/ 

DECLARE CONTINUE HANDLER FOR SQLSTATE '02000' SET done=1; /*定义句柄。continue设定循环退出条件。*/ 

/*当sqlstate为’02000‘时,设置done的值为1,02000是指一个没有找到的错误码*/ 

/*sqlstate是mysql的规定。表示找到最后无数据时,mysql报出的状态码!!*/ 

OPEN ordernumbers; /*打开游标*/ 

REPEAT /*循环开始*/ 

FETCH ordernumbers INTO num; /*获取一行一列的数据*/ 

INSERT INTO t_table(val) VALUES(num); /*插入到t_table表中*/ 

UNTIL done END REPEAT; /*类似于java中的do...while循环*/ 

CLOSE ordernumbers ; /*关闭游标*/ 

END // 

DELIMITER ; 

/*调用游标:*/ 

CALL processorders(); 

4.多列游标的声明: 

DECLARE ordernumbers CURSOR FOR SELECT order_num,cust_id FROM orders; 

对应的FETCH的用法:FETCH ordernumbers INTO num,id; 

     本文转自韩立伟 51CTO博客,原文链接:http://blog.51cto.com/hanchaohan/926419,如需转载请自行联系原作者