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