DELIMITER $$ CREATE PROCEDURE show_user() BEGIN DECLARE done INT DEFAULT 0; DECLARE id INT; DECLARE username VARCHAR(50); DECLARE cursor_user CURSOR FOR SELECT id, username FROM user; DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = 1; OPEN cursor_user; REPEAT FETCH cursor_user INTO id, username; IF NOT done THEN SELECT CONCAT('ID:', id, ' Username:', username) AS 'UserInfo'; END IF; UNTIL done END REPEAT; CLOSE cursor_user; END $$ DELIMITER ;
在上面的代码中,大家定义了一个名为show_user的存储过程,用于查询user表中的所有用户名和ID。该存储过程使用了游标技术,通过逐行查询结果,将数据逐一输出到屏幕上。
在存储过程内,大家首先定义了三个变量id,username和done。其中done是一个标记变量,用于标识游标查询是否结束。id和username变量则分别存储了从user表中查询到的id和username值。
接下来大家定义了一个名为cursor_user的游标,该游标查询了user表中的所有id和username数据。
在游标的定义完成后,大家使用了CONTINUE HANDLER来设置游标查询结束的标记。如果游标未能正常查询到结果,则表示游标查询已经结束,大家将DONE设为1。
接下来是最核心的循环部分。大家首先使用OPEN语句打开游标。在游标打开后,大家使用REPEAT语句开始循环,不断地使用FETCH语句,从游标中查询一条数据。
如果查询到数据,大家使用SELECT语句将数据输出。如果查询到数据的同时done标记被设为1,则表示游标查询已经结束,大家将跳出循环。
最后大家使用CLOSE语句关闭了游标,存储过程结束。
这就是一个简单的MySQL游标的示例。可以看出,使用MySQL游标非常简单,只需要一些基本的SQL知识即可编写出高效的查询存储过程。