带循环语句WHILE存储过程
此存储过程名为 IncreaseSalary,它会遍历 employees 表中的每个员工,并将他们的薪水增加 10%。
CREATE PROCEDURE IncreaseSalary() BEGIN DECLARE emp_count INT; DECLARE i INT DEFAULT 0; DECLARE emp_id INT; DECLARE emp_salary DECIMAL(10, 2); -- 获取员工数量 SELECT COUNT(*) INTO emp_count FROM employees; -- 循环遍历并更新薪水 WHILE i < emp_count DO SET i = i + 1; -- 获取当前员工的id和薪水 SELECT id, salary INTO emp_id, emp_salary FROM employees WHERE id = i; -- 对薪水进行增加 UPDATE employees SET salary = emp_salary * 1.1 WHERE id = emp_id; END WHILE; END;
调用存储过程进行检验
CALL IncreaseSalary();
检验结果
原来薪水
当前薪水
带循环语句REPEAT UNTIL存储过程
此存储过程名为 DisplayEmployeesWithRepeatUntil,它会使用 REPEAT…UNTIL 循环遍历 employees 表中的每个员工,并输出他们的信息。
DELIMITER $$ CREATE PROCEDURE DisplayEmployeesWithRepeatUntil() BEGIN --声明变量 DECLARE emp_count INT;--员工数量 DECLARE i INT DEFAULT 1; DECLARE emp_id INT; DECLARE emp_name VARCHAR(50); DECLARE emp_age INT; DECLARE emp_salary DECIMAL(10, 2); -- 获取员工数量 SELECT COUNT(*) INTO emp_count FROM employees; -- 循环遍历并输出员工信息 REPEAT -- 获取当前员工信息 SELECT id, name, age, salary INTO emp_id, emp_name, emp_age, emp_salary FROM employees WHERE id = i; -- 输出员工信息 SELECT CONCAT('ID: ', emp_id, ', Name: ', emp_name, ', Age: ', emp_age, ', Salary: ', emp_salary) AS employee_info; SET i = i + 1; UNTIL i > emp_count END REPEAT; END$$ DELIMITER ;
调用存储过程进行检验
CALL DisplayEmployeesWithRepeatUntil();
检验结果
带循环语句LOOP存储过程
此存储过程名为 DisplayEmployeesWithLoop,它会使用LOOP循环遍历 employees 表中的每个员工,并输出他们的信息。
CREATE PROCEDURE DisplayEmployeesWithLoop() BEGIN DECLARE emp_count INT; DECLARE i INT DEFAULT 1; DECLARE emp_id INT; DECLARE emp_name VARCHAR(50); DECLARE emp_age INT; DECLARE emp_salary DECIMAL(10, 2); -- 获取员工数量 SELECT COUNT(*) INTO emp_count FROM employees; -- 循环遍历并输出员工信息 emp_loop: LOOP -- 获取当前员工信息 SELECT id, name, age, salary INTO emp_id, emp_name, emp_age, emp_salary FROM employees WHERE id = i; -- 输出员工信息 SELECT CONCAT('ID: ', emp_id, ', Name: ', emp_name, ', Age: ', emp_age, ', Salary: ', emp_salary) AS employee_info; SET i = i + 1; IF i > emp_count THEN LEAVE emp_loop; END IF; END LOOP; END;
调用存储过程检验
CALL DisplayEmployeesWithLoop();
检验结果
查询存储过程
--查询所有数据库 SHOW PROCEDURE STATUS; --查询指定数据库test。以上所有例子都基于test数据库 SHOW PROCEDURE STATUS WHERE db='test'
结果
查询存储过程定义源码
SHOW CREATE PROCEDURE 存储过程名; SHOW CREATE PROCEDURE categorizeEmployee;
结果
删除存储过程
DROP PROCEDURE 存储过程名;
🌟写在最后
最后感谢大家对于此博文的阅读,如对存储过程有补充或者疑问之处,请大家在评论区留言。感谢大家的指正与点评。