数据库
首页 > 数据库> > MySQL 游标(CURSOR)

MySQL 游标(CURSOR)

作者:互联网

游标(cursor)

游标是用来存储查询结果集的数据类型,在存储过程和函数中可以使用游标对结果集进行循环的处理。游标的使用包括游标的声明、OPEN、FETCH和CLOSE,其语法如下:

#声明游标
declare 游标名称 cursor for 查询语句;

#打开游标
open 游标名称;

#获取游标记录
fetch 游标名称 into 变量[,变量];

#关闭游标
close 游标名称;

案例:根据传入的参数usalary,来查询employees表中所有员工工资小于等于usalary的员工名和所在部门,并将用户的专业插入到所创建的一张新表(id,name,department_id)。

DROP PROCEDURE myp1;
DELIMITER $

CREATE PROCEDURE myp1(IN usalary DOUBLE)
BEGIN
	#注意创建变量要在创建游标之前!!!
	DECLARE empname VARCHAR(50);
	DECLARE empdid INT;
	#step1 声明游标,存储查询结果
	DECLARE u_cursor CURSOR FOR 
	SELECT CONCAT(last_name,' ',first_name),department_id 
	FROM employees 
	WHERE salary<=usalary;
	
	##step2 准备:创建表结构
	DROP TABLE IF EXISTS emp_under_sal;
	CREATE TABLE IF NOT EXISTS emp_under_sal(
		id INT PRIMARY KEY AUTO_INCREMENT,
		NAME VARCHAR(50),
		department_id INT
		);
	#step3 开启游标
	OPEN u_cursor;
	#step4 获取游标中的记录
	WHILE TRUE DO #目前这里还有一个bug,等学习了handler之后就可以解决
		FETCH u_cursor INTO empname,empdid;
		#step5 插入数据到新表中
		INSERT INTO emp_under_sal VALUES(NULL,empname,empdid);
	END WHILE;
	
    #step6 关闭游标
	CLOSE u_cursor;
END$

#调用存储过程
call myp1(10000);

存储过程
handler

标签:usalary,cursor,name,游标,DECLARE,CURSOR,MySQL,id
来源: https://blog.csdn.net/weixin_44300779/article/details/122807057