mysql存储过程循环遍历sql结果集 中执行SQL
时间: 2024-01-31 13:03:06 浏览: 166
在MySQL存储过程中,可以使用游标(Cursor)来循环遍历SQL结果集。以下是一个简单的例子,演示如何使用游标在存储过程中循环遍历结果集并执行SQL。
假设我们有一个表 `employee`,其中存储了员工的信息,包括 `id`、`name` 和 `salary`。
```
CREATE TABLE employee (
id INT PRIMARY KEY,
name VARCHAR(50),
salary INT
);
```
现在,我们要写一个存储过程,用于将员工的薪水增加10%。我们可以使用游标来遍历员工表,并执行更新操作。
```
DELIMITER //
CREATE PROCEDURE increase_salary()
BEGIN
DECLARE done INT DEFAULT FALSE;
DECLARE emp_id INT;
DECLARE emp_name VARCHAR(50);
DECLARE emp_salary INT;
-- 声明游标
DECLARE cur CURSOR FOR SELECT id, name, salary FROM employee;
-- 定义异常处理器
DECLARE CONTINUE HANDLER FOR NOT FOUND SET done = TRUE;
-- 打开游标
OPEN cur;
-- 循环遍历游标
read_loop: LOOP
-- 从游标中读取一行记录
FETCH cur INTO emp_id, emp_name, emp_salary;
IF done THEN
LEAVE read_loop;
END IF;
-- 更新薪水
UPDATE employee SET salary = salary * 1.1 WHERE id = emp_id;
END LOOP;
-- 关闭游标
CLOSE cur;
END//
DELIMITER ;
```
在上面的存储过程中,我们首先声明了一个游标 `cur`,用于查询员工表中的所有记录。然后,我们打开游标,并使用循环遍历游标中的每一条记录。在每次循环中,我们从游标中读取一行记录,并使用该记录中的 `id` 更新员工表中对应员工的薪水。最后,我们关闭游标。
需要注意的是,我们在存储过程中使用了异常处理器 `CONTINUE HANDLER FOR NOT FOUND`,用于在游标遍历完所有记录后关闭游标。
阅读全文