存储过程和函数(自定义函数)
-
存储过程:
分类:1. 存储过程的参数类型可以是IN、OUT和INOUT。根据这点分类如下:
2. ①没有参数(无参数无返回) ②仅仅带 IN 类型(有参数无返回)
③仅仅带 OUT 类型(无参数有返回) ④既带 IN 又带 OUT(有参数有返回)
⑤带 INOUT(有参数有返回)
注意:IN、OUT、INOUT 都可以在一个存储过程中带多个。
LANGUAGE SQL :说明存储过程执行体是由SQL语句组成的,当前系统支持的语言为SQL。
调用格式:
#存储过程与存储函数
#准备工作
CREATE DATABASE dbtest5;
USE dbtest5;
CREATE TABLE employees
AS
SELECT *
FROM atguigudb .employees;
CREATE TABLE departments
AS
SELECT * FROM atguigudb.departments;
#创建储存过程
#无参数返回值
#举例;创建储存过程select_all_data(),查看emps 表的所有数据
DELIMITER $
CREATE PROCEDURE select_all_data()
BEGIN
SELECT *FROM employees;
END$
DELIMITER ;
#存储过程的调用
CALL select_all_data();
#创建存储过程avg_employee_salay(),并返回数据类型为字符串型。
delimiter //
CREATE PROCEDURE avg_employee_salay()
BEGIN
SELECT AVG(salary) FROM employees;
END //
delimiter ;
#调用
CALL avg_employee_salay()
#创建存储函数过程show_max_salary,用来查看employees表的最高薪资
delimiter //
CREATE PROCEDURE show_max_salary()
BEGIN
SELECT MAX(salary)
FROM employees;
END //
delimiter;
CALL show_max_salary();
#带 OUT
#举例4:创建存储过程show_min_salary(),查看“emps”表的最低薪资值。并将最低薪资通过OUT参数“ms”输出
DELIMITER //
CREATE PROCEDURE show_min_salary(OUT ms DOUBLE)
BEGIN
SELECT MIN(salary) INTO MS #把min值写进ms里面
FROM employees;
END //
DELIMITER;
#调用
CALL show_min_salary(@ms) #@表示用户定义的一个变量
#查看变量值
SELECT @ms;
#IN
#创建存储过程show_someone_salary(),查看“employees;”表的某个员工的薪资,并用IN参数empname输入员工姓名。
DELIMITER//
CREATE PROCEDURE show_someone_salary(IN empname VARCHAR(20))
BEGIN
SELECT salary FROM employees
WHERE last_name=employees;
END //
DELIMITER;
#调用方式1
CALL show_someone_salary('Abel'); # last_name 里面数据想调用工资就调用哪个
#调用方式2
SET @empname :='Abel';
CALL show_someone_salary