声明:对于游标,我也没有咋用过,有些东西也不是很理解。这里给大家拷贝过来一个简单的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,如需转载请自行联系原作者