存储过程中游标的作用:用游标得到某一个结果集,逐行处理数据。
– 语法
– 声明语法
DECLARE cursor_name CURSOR FOR select_statement
– 打开语法
OPEN cursor_name
– 取值语法
FETCH cursor_name INTO var_name [, var_name] …
– 关闭语法
CLOSE cursor_name
举例
单独执行sqlSELECT e.empno,e.ename,e.sal FROM emp e,dept d WHERE e.deptno = d.deptno AND d.dname = 'RESEARCH';
结果:
-- 需求:按照部门名称查询员工,通过select查看员工的编号、姓名、薪资。(注意,此处仅仅演示游标用法)
DELIMITER $$
USE stores$$
DROP PROCEDURE IF EXISTS sp_show_emp$$
CREATE PROCEDURE sp_show_emp(IN dept_name VARCHAR(32))
BEGIN
DECLARE e_no INT;
DECLARE e_name VARCHAR(32);
DECLARE e_sal DECIMAL(7,2);
DECLARE emp_cursor CURSOR FOR
SELECT e.empno,e.ename,e.sal
FROM emp e,dept d
WHERE e.deptno = d.deptno AND d.dname = dept_name;
OPEN emp_cursor;
-- 逐行遍历
-- 输出第一行数据
FETCH emp_cursor INTO e_no,e_name,e_sal;
SELECT e_no,e_name,e_sal;
-- 输出第二行数据
FETCH emp_cursor INTO e_no,e_name,e_sal;
SELECT e_no,e_name,e_sal;
-- 输出第三行数据
FETCH emp_cursor INTO e_no,e_name,e_sal;
SELECT e_no,e_name,e_sal;
CLOSE emp_cursor;
END$$
DELIMITER ;
CALL sp_show_emp('RESEARCH');
存储过程执行的结果:
结果1:
结果2:
结果3: