MySQL学习笔记——存储过程和函数

目录

一、存储过程

1、存储过程概述

1.1 理解

1.2 分类

2、创建存储过程

2.1  语法分析

​编辑

3、代码示例

3.1 准备工作

 3.2 存储过程的调用

3.3 创建存储过程

3.4 如何调试


 本章的函数其实相当于用户自定义的函数,前文所学的是内置函数

一、存储过程

1、存储过程概述

1.1 理解

MySQL学习笔记——存储过程和函数_第1张图片

1.2 分类

MySQL学习笔记——存储过程和函数_第2张图片

2、创建存储过程

2.1  语法分析

语法:

MySQL学习笔记——存储过程和函数_第3张图片

说明:

MySQL学习笔记——存储过程和函数_第4张图片

MySQL学习笔记——存储过程和函数_第5张图片

MySQL学习笔记——存储过程和函数_第6张图片

MySQL学习笔记——存储过程和函数_第7张图片

对第五点的举例

MySQL学习笔记——存储过程和函数_第8张图片

由于MySQL中;代表语句的结束,因此需要更改结束的标志符号才不会报错,而第一个DELIMITER 相当于使用$符号来当作结束语句,而不是分号了,这样才不会报错。如果要把结束语句改回来,可以再次使用DELIMITER

3、代码示例

3.1 准备工作

MySQL学习笔记——存储过程和函数_第9张图片

 3.2 存储过程的调用

关键字:CALL

CALL select_all_data();

3.3 创建存储过程

类型1:没有参数

举例1:创建存储过程select_all_data(),查看employees表的所有数据 //存储过程的名称相当于函数名字,要放在CREATE PROCEDURE后面。

DELIMITER $ 
CREATE PROCEDURE select_all_data()
BEGIN
    SELECT * FROM employees;
END $

DELIMITER ; 

举例2:创建存储过程avg_employyes_salary(),返回所有员工的平均工资

DELIMITER //

CREATE PROCEDURE avg_employee_salary()
BEGIN
    SELECT AVG(salary) FROM employees;
END //

DELIMITER ;

#调用

CALL avg_employee_salary();

类型2:带OUT(有返回值)

举例4:创建存储过程show_min_salary(),查看"emps"表的最低薪资值。并将最低薪资通过OUT参数"ms"输出

DELIMITER //

CREATE PROCEDURE show_min_salary(OUT ms DOUBLE)
BEGIN
    SELECT MIN(salary) INTO ms FROM employees;
END //

DELIMITER ;

#调用

CALL show_min_salary(@ms);

#查看变量值

SELECT @ms;

类型3:带IN(有参数)

举例5:创建存储过程show_someone_salary(),查看"emps"表的某个员工的薪资,并用IN参数empname输入员工姓名

DELIMITER //

CREATE PROCEDURE show_someone_salary(IN empname VARCHAR(20))
BEGIN
    SELECT salary FROM employees WHERE last_name=empname;
END //

DELIMITER ;

#调用

方式1
CALL show_someone_salary('Abel');

#方式2:
SET @empname:='Abel'; //:=赋值符号
CALL show_someone_salary(@empname);

//查询结果
SELECT * FROM employees WHERE last_name='Abel'

类型4:带IN和OUT

举例6:创建存储过程show_someone_salary2(),查看"emps"表的某个员工的薪资,并用IN参数empname输入员工姓名,用OUT参数empsalary输出员工薪资

DELIMITER //
CREATE PROCEDURE show_someone_salary(IN empname VARCHAR(20),OUT empsalary DECIMAL(10,2))
BEGIN 
    SELECT salary INTO empsalary FROM employees WHERE last_name=empname;
END //
DELIMITER ;

#调用

SET @empname:='Abel';
CALL show_some salary2(@empname,@empsalary);

SELECT @empsalary;

类型5:带INOUT

举例7:创建存储过程show_mgr_name(),查询某个员工领导的姓名,并且使用INOUT参数"empname"输入员工的姓名,输出领导姓名

DELIMITER $
CREATE PROCEDURE show_mgr_name(INOUT empname VARCHAR(25))
BEGIN 
    SELECT manager_id FROM employees WHERE employee_id=(SELECT manager_id FROM employees WHERE last_name=empname);
END $
DELIMITER ;

#调用

SET @empname:='Abel';
CALL show_mgr_name(@empname);

SELECT @empname;

3.4 如何调试

你可能感兴趣的:(mysql)