MySQL

27-存储过程

2022-08-31  本文已影响0人  紫荆秋雪_文

一、存储过程概述

二、存储过程优点

三、存储过程分类

四、创建存储过程

1、语法分析

CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...) 
[characteristics ...] 
BEGIN
    存储过程体 
END

1、characteristics:表示创建存储过程时指定的对存储过程的约束条件

LANGUAGE SQL 
    | [NOT] DETERMINISTIC 
    | { CONTAINS SQL | NO SQL | READS SQL DATA | MODIFIES SQL DATA } 
    | SQL SECURITY { DEFINER | INVOKER } 
    | COMMENT 'string 描述'

2、存储过程体中可以有多条 SQL 语句,如果仅仅一条SQL 语句,则可以省略 BEGIN 和 END编写存储过程并不是一件简单的事情,可能存储过程中需要复杂的 SQL 语句

3、需要设置新的结束标记

因为MySQL默认的语句结束符号为分号‘;’。为了避免与存储过程中SQL语句结束符相冲突,需要使用DELIMITER改变存储过程的结束符。
比如:“DELIMITER //”语句的作用是将MySQL的结束符设置为//,并以“END //”结束存储过程。
存储过程定义完毕之后再使用“DELIMITER ;”恢复默认结束符。
DELIMITER也可以指定其他符号作为结束符。
当使用DELIMITER命令时,应该避免使用反斜杠(‘\’)字符,因为反斜线是MySQL的转义字符。

DELIMITER 新的结束标
DELIMITER $ 
CREATE PROCEDURE 存储过程名(IN|OUT|INOUT 参数名 参数类型,...) 
[characteristics ...] 
    BEGIN
        sql语句1; 
        sql语句2; 
    END $
DELIMITER ;

2、创建存储过程

1、创建存储过程fetchalldata(),查看 emp 表的所有数据

DELIMITER $ # 自定义结束符

CREATE PROCEDURE fetchalldata()

BEGIN
    SELECT * FROM emp;

END $   # 结束

DELIMITER ; # 还原结束符
CALL fetchalldata();
image.png

2、创建存储过程avg_salary(),查看所有员工平均工资

DELIMITER $

CREATE PROCEDURE avg_salary()
BEGIN
    SELECT AVG(salary) AS avg_salary FROM emp;
END $

DELIMITER ;

3、创建存储过程show_min_salary(),查看“emps”表的最低薪资值。并将最低薪资通过OUT参数“ms”输出

DELIMITER $
CREATE PROCEDURE show_min_salary(OUT min DOUBLE)
BEGIN
    SELECT min(salary) INTO min
        FROM emp;
END $
DELIMITER ;
CALL show_min_salary(@min);
SELECT @min;

4、创建存储过程show_someone_salary2(),查看“emps”表的某个员工的薪资,并用IN参数empname输入员工姓名,用OUT参数empsalary输出员工薪资

DELIMITER $
CREATE PROCEDURE show_someone_salary2(IN name VARCHAR(25), OUT empsalary DOUBLE)
BEGIN
    SELECT salary INTO empsalary FROM emp WHERE last_name = name LIMIT 1;
END $
DELIMITER ;
CALL show_someone_salary2('King', @empsalary);
SELECT @empsalary;

5、创建存储过程show_mgr_name(),查询某个员工领导的姓名,并用INOUT参数“empname”输入员工姓名,输出领导的姓名

DELIMITER $
CREATE PROCEDURE show_mgr_name(INOUT empname VARCHAR(20))
BEGIN
    SELECT last_name
    INTO empname
    FROM emp
    WHERE employee_id = (SELECT manager_id
                 FROM emp
                 WHERE last_name = empname);
END $
DELIMITER ;
SET @name = 'Ernst';
CALL show_mgr_name(@name);
SELECT @name;
上一篇 下一篇

猜你喜欢

热点阅读