示例:把表中status为0所对应的age值改为99(当然有更简单的方法,这里主要是为了学习MySQL存储过程中游标的使用)
先建表如下:
/* 在test库下建立testb表 */
CREATE TABLE `test`.`testb` (
`ID` int(11) NOT NULL,
`NAME` varchar(255) CHARACTER SET utf8 COLLATE utf8_general_ci DEFAULT NULL,
`AGE` int(11) DEFAULT NULL,
`STATUS` int(1) DEFAULT NULL,
PRIMARY KEY (`ID`) USING BTREE
) ENGINE = InnoDB CHARACTER SET = utf8 COLLATE = utf8_general_ci ROW_FORMAT = Dynamic;
录入数据如下:
存储过程如下:
CREATE DEFINER=`root`@`localhost` PROCEDURE `PRO_CURSOR`()
BEGIN
/*stopflag用于停止遍历游标*/
DECLARE stopflag INT DEFAULT 0;
DECLARE id_new INT DEFAULT 0;
/*查询符合条件的id放入游标id_cur中*/
DECLARE id_cur CURSOR FOR SELECT id FROM testb WHERE status=0;
/*当遍历结束,把stopflag设为1*/
DECLARE CONTINUE HANDLER FOR not found set stopflag=1;
/*打开游标*/
OPEN id_cur;
/*取出第一个游标值放入id_new中*/
FETCH id_cur into id_new;
WHILE stopflag=0 DO
BEGIN
/*更新status为0的所有age为99*/
UPDATE testb SET age=99 WHERE id=id_new;
/*取出下一个游标值放入id_new中*/
FETCH id_cur into id_new;
END;
END WHILE;
/*关闭游标*/
CLOSE id_cur;
END
运行存储过程之后: