Skip to content

存储过程

sh
# 准备工作:
# 1.导入atguigudb数据库

# 2.建立dbtest08数据库
CREATE DATABASE dbtest08 CHARACTER SET utf8;

# 3.切换当前数据库为dbtest08
USE dbtest08;

# 4.建立表
CREATE TABLE emps
AS
SELECT * FROM atguigudb.employees;

CREATE TABLE depts
AS
SELECT * FROM atguigudb.departments;

#------------------进行以下操--------------

# 1、创建存储过程select_all_data(),查看 emps 表的所有数据。
DELIMITER //
CREATE PROCEDURE select_all_data()
BEGIN
    SELECT * FROM emps;
END //
DELIMITER ;

CALL select_all_data();
# 2、创建存储过程avg_employee_salary(),返回所有员工的平均工资。
DELIMITER //
CREATE PROCEDURE avg_employee_salary()
BEGIN
    SELECT AVG(salary)
    FROM emps;
END //
DELIMITER ;

CALL avg_employee_salary();

# 3、创建存储过程show_max_salary(),用来查看“emps”表的最高薪资值。
DELIMITER //
CREATE PROCEDURE show_max_salary()
BEGIN
    SELECT MAX(salary) FROM emps;
END //
DELIMITER ;

CALL show_max_salary();

# 4、创建存储过程show_min_salary(),查看“emps”表的最低薪资值,并将最低薪资通过OUT参数“ms”输出。
DELIMITER //
CREATE PROCEDURE show_min_salary(OUT ms DOUBLE)
BEGIN
    SELECT MIN(salary) INTO ms FROM emps;
END //
DELIMITER ;

CALL show_min_salary(@res);

SELECT @res;

# 5、创建存储过程show_someone_salary(),查看“emps”表的某个员工的薪资,并用IN参数empname输入员工姓名。
DELIMITER //
CREATE PROCEDURE show_someone_salary(IN empname VARCHAR(25))
BEGIN
    SELECT salary
    FROM emps
    WHERE last_name = empname;
END //
DELIMITER ;

CALL show_someone_salary('Lee');
# 6、创建存储过程show_someone_salary2(),查看“emps”表的某个员工的薪资,并用IN参数empname输入员工姓名,用OUT参数empsalary输出员工薪资。
DELIMITER //
CREATE PROCEDURE show_someone_salary2(IN empname VARCHAR(25), OUT empsalary DOUBLE)
BEGIN
    SELECT salary INTO empsalary
    FROM emps
    WHERE last_name = empname;
END //
DELIMITER ;

CALL show_someone_salary2('Abel', @emp_sal);

SELECT @emp_sal;

# 7、创建存储过程show_mgr_name(),查询某个员工领导的姓名,并用INOUT参数“empname”输入员工姓名,输出领导的姓名。
DELIMITER //
CREATE PROCEDURE show_mgr_name(INOUT empname VARCHAR(25))
BEGIN
    #创建一个局部变量mgrno
    DECLARE mgrno INT;
    #通过empname查询得到管理者编号,送入mgrno
    SELECT manager_id INTO mgrno
    FROM emps
    WHERE last_name = empname;
    #通过mgrno查询得到管理者的姓名,送入empname
    SELECT last_name INTO empname
    FROM emps
    WHERE employee_id = mgrno;
END //
DELIMITER ;

SET @emp_name = 'Abel';
CALL show_mgr_name(@emp_name);

SELECT @emp_name;

# 8、查看所有的存储过程
SHOW PROCEDURE STATUS;

# 9、查看存储过程show_mgr_name的创建语句
SHOW CREATE PROCEDURE show_mgr_name;
# 10、删除所有的存储过程
DROP PROCEDURE show_mgr_name;
DROP PROCEDURE show_someone_salary2;