用户变量局部变量
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;
SELECT * FROM emps;
SELECT * FROM depts;
# ------------------用户变量与局部变量----------------------
# 例1:编写一个过程get_value,使用局部变量,查询员工号为102的员工名和工资。
DELIMITER //
CREATE PROCEDURE get_value(IN emp_id INT, OUT emp_name VARCHAR(30), OUT emp_sal DOUBLE)
BEGIN
SELECT last_name, salary INTO emp_name, emp_sal
FROM emps
WHERE employee_id = emp_id;
END //
DELIMITER ;
CALL get_value(102, @emp_name, @emp_sal);
SELECT @emp_name, @emp_sal;
# 例2:编写一个过程add_value,使用局部变量,实现两个整型变量的求和并打印。
DELIMITER //
CREATE PROCEDURE add_value(IN a INT, IN b INT)
BEGIN
DECLARE res INT;
SET res = a + b;
SELECT res;
END //
DELIMITER ;
CALL add_value(10, 20);
# 例3:创建存储过程“different_salary”,查询某员工和他领导的薪资差距,并用IN参数emp_id接收员工id,用OUT参数dif_salary输出薪资差距结果。
DELIMITER //
CREATE PROCEDURE different_salary(IN emp_id INT, OUT dif_salary DOUBLE)
BEGIN
DECLARE emp_sal, mgr_sal DOUBLE;
DECLARE mgr_id INT;
#根据员工号,得到员工工资和领导的编号
SELECT salary, manager_id INTO emp_sal, mgr_id
FROM emps
WHERE employee_id = emp_id;
#根据领导的编号得到领导的工资
SELECT salary INTO mgr_sal
FROM emps
WHERE employee_id = mgr_id;
#计算员工与领导的工资之差
SET dif_salary = emp_sal - mgr_sal;
END //
DELIMITER ;
CALL different_salary(102, @res);
SELECT @res;
# 例4: 创建函数get_count(),返回公司的员工个数
DELIMITER //
CREATE FUNCTION get_count()
RETURNS INT
BEGIN
DECLARE cnt INT;
SELECT COUNT(*) INTO cnt
FROM emps;
RETURN cnt;
END //
DELIMITER ;
SELECT get_count();
# 例5: 创建函数ename_salary(),根据员工姓名,返回它的工资
DELIMITER //
CREATE FUNCTION ename_salary(emp_name VARCHAR(30))
RETURNS DOUBLE
BEGIN
DECLARE emp_sal DOUBLE;
SELECT salary INTO emp_sal
FROM emps
WHERE last_name = emp_name;
RETURN emp_sal;
END //
DELIMITER ;
SELECT ename_salary('Chen');
# 例6:创建函数dept_sal() ,根据部门名,返回该部门的平均工资
DELIMITER //
CREATE FUNCTION dept_sal(dept_name VARCHAR(30))
RETURNS DOUBLE
BEGIN
DECLARE avg_sal DOUBLE;
DECLARE dept_id INT;
#根据部门名,得到部门编号
SELECT department_id INTO dept_id
FROM depts
WHERE department_name = dept_name;
#根据部门编号,统计该部门的平均工资
SELECT AVG(salary) INTO avg_sal
FROM emps
WHERE department_id = dept_id;
#返回该部门的平均工资
RETURN avg_sal;
END //
DELIMITER ;
SELECT dept_sal('IT');
# 例7:创建函数add_float(),实现传入两个float变量,返回二者之和
DELIMITER //
CREATE FUNCTION add_float(a FLOAT, b FLOAT)
RETURNS FLOAT
BEGIN
DECLARE res FLOAT;
SET res = a + b;
RETURN res;
END //
DELIMITER ;
SELECT add_float(12.5, 23.5);