电脑
MySQL
Navicat等MySQL可视化管理工具
1.语句结构声明光标:DECLARE 光标名称 CURSOR FOR 查询语句打开光标:OPEN 光标名称使用光标:FETCH 光标名称 INTO 参数名称1,参数名称2....(参数名称必须已定义)关闭光标CLOSE 光标名称
1.创建数据库CREATE TABLE `test_10` ( `id` int(11) NOT NULL AUTO_INCREMENT, #id `name` varchar(50) DEFAULT NULL, #名称 `age` int(11) DEFAULT NULL, #年龄 PRIMARY KEY (`id`) #主键) ENGINE=MyISAM AUTO_INCREMENT=14 DEFAULT CHARSET=utf8mb4;
2.插入测试数据INSERT INTO `test_10` VALUES ('1', 'rat', '2');INSERT INTO `test_10` VALUES ('2', 'ox', '4');INSERT INTO `test_10` VALUES ('3', 'tiger', '6');INSERT INTO `test_10` VALUES ('4', 'rabbit', '8');INSERT INTO `test_10` VALUES ('5', 'dragon', '10');INSERT INTO `test_10` VALUES ('6', 'snake', '12');INSERT INTO `test_10` VALUES ('7', 'horse', '14');INSERT INTO `test_10` VALUES ('8', 'sheep', '16');INSERT INTO `test_10` VALUES ('9', 'monkey', '18');INSERT INTO `test_10` VALUES ('10', 'chicken', '20');INSERT INTO `test_10` VALUES ('11', 'dog', '22');INSERT INTO `test_10` VALUES ('12', 'pig', '24');INSERT INTO `test_10` VALUES ('13', 'cat', '26');
题目:存储过程中使用光标,把age<=10的数据age-1,age>10的数据age-2CREATE PROCEDURE test_cursor ()#定义存储过程BEGIN #开始DECLARE animal_id INT (11);#定义变量参数DECLARE animal_age INT (11);#定义变量参数DECLARE cur CURSOR FOR SELECT id,age FROM test_10;#定义光标,注意CURSOROPEN cur;#打开游标 read_loop:LOOP#循环语句 FETCH cur INTO animal_id,animal_age;#使用游标赋值到变量 IF animal_age > 10 THEN #如果age>10 age-2 UPDATE test_10 SET age = animal_age - 2 WHERE id = animal_id; ELSE #否则age-1 UPDATE test_10 SET age = animal_age - 1 WHERE id = animal_id; END IF; IF animal_id = 13 THEN #如果是最大的13 跳出循环 LEAVE read_loop; END IF; #结束条件语句 END LOOP read_loop; #结束循环语句CLOSE cur;
调用一下刚刚定义的存储过程call test_cursor;可以看到完全实现了示例的效果
声明光标的CURSOR 是关键字,注意不要省略
每个代码块记住要加上分号;