提示:mysql 游标必须要在在存储过程中才能使用,不能单独使用
数据表
CREATE TABLE `student_score` (
`id` int unsigned NOT NULL AUTO_INCREMENT,
`student_id` varchar(128) DEFAULT NULL,
`student_course_name` varchar(128) DEFAULT NULL,
`score` int DEFAULT NULL,
`result` varchar(128) DEFAULT NULL,
PRIMARY KEY (`id`)
);
INSERT INTO `student_score` (`id`, `student_id`, `student_course_name`, `score`, `result`)
VALUES
('1', '001', '语文', '95', NULL),
('2', '002', '语文', '80', NULL),
('3', '003', '语文', '59', NULL);
代码示例
-- 定义分隔符为 //
DELIMITER //
-- 创建存储过程
CREATE PROCEDURE set_student_result()
BEGIN
-- 定义变量,提示:定义变量语句 需要放在 定义游标语句 之前
declare var_score int;
declare var_id varchar(128);
-- 定义游标查询结束标识
declare done int default false;
-- 定义游标
declare cur cursor for select student_id, score from student_score where score > 0;
-- 当 fetch 游标未发现数据时,done 置为 TRUE
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 开启游标
open cur;
-- 游标遍历数据:填充学生成绩表 result 字段,当分数 score 小于 60 时候为不及格,大于等于 60 时为及格
read_loop: loop
fetch cur into var_id, var_score;
if done then
leave read_loop;
end if;
if var_score >= 60 then
update student_score set result = '及格' where student_id = var_id;
end if;
if var_score < 60 then
update student_score set result = '不及格' where student_id = var_id;
end if;
end loop;
-- 关闭游标
close cur;
-- 存储过程结束
END //
-- 恢复定义分隔符为 ;
DELIMITER ;
SHOW PROCEDURE STATUS;
CALL set_student_result();
DROP PROCEDURE IF EXISTS set_student_result;
标签:示例,--,游标,score,result,student,mysql,id From: https://www.cnblogs.com/baokang/p/18531723