MySQL-存储过程

目录

一、存储过程定义

二、存储过程创建

1、变量的定义

2、存储过程的分支语句

[2.1 双分支IF语句](#2.1 双分支IF语句)

[2.2 多分支IF语句](#2.2 多分支IF语句)

3、存储过程的循环语句

三、存储过程调用

四、存储过程显示和删除


一、存储过程定义

存储过程(Stored Procedure)是一种在数据库中存储复杂程序,以便外部程序调用的一种数据库对象。

存储过程的特点:

①完成特定功能的SQL语句集,是SQL语言层面的代码封装。

②经编译创建并保存在数据库中。

③用户可通过指定存储过程的名字并给定参数(需要时)来调用执行。

二、存储过程创建

语法:

sql 复制代码
create procedure 存储过程名(定义输入输出参数)

[存储特征]

begin

sql语句;

end

参数:

in表示输入参数

out表示输出参数

inout表示既可以输入也可以输出参数

例:在客户端显示"helloworld"字符串

sql 复制代码
CREATE PROCEDURE hello()

BEGIN

SELECT "helloworld";

END;

CALL hello(); #调用存储过程

1、变量的定义

declare变量名 数据类型 default 默认值;

declare 变量名 表名.字段名%type default 默认值; #变量和某表的某字段保持一致

·变量就是在内存中分配的一块存储空间

2、存储过程的分支语句

2.1 双分支IF语句
sql 复制代码
IF 条件表达式 THEN

分支语句1;

ELSE

分支语句2;

END IF;

示例:定义一个存储过程,判断用户成绩是否及格

sql 复制代码
create procedure sc(in score int,out result varchar(10))

begin

if score>=60 then

set result="及格";

else

set result:="不及格";

end if;

end;
2.2 多分支IF语句
sql 复制代码
IF 条件表达式1 THEN

分支语句1;

ELSEIF 条件表达式2 THEN

分支语句2;

ELSE

分支语句3;

END IF;

示例:定义一个存储过程,判断成绩等级,用户输入百分制分数,[90,100]优秀,[80,90)良好,[70,80)一般,[60,70)及格,[0,60)不及格,其他分数-->参数值有误

sql 复制代码
DROP PROCEDURE IF EXISTS sclevel;

CREATE PROCEDURE sclevel(IN sc FLOAT,OUT res VARCHAR(10))

BEGIN

IF sc>100 THEN

SET res="输入参数有误!!!";

ELSEIF sc>=90 THEN

SET res="优秀";

ELSEIF sc>=80 THEN

SET res="良好";

ELSEIF sc>=70 THEN

SET res="一般";

ELSEIF sc>=60 THEN

SET res="及格";

ELSEIF sc>=0 THEN

SET res="不及格";

ELSE

SET res="输入参数有误!!!";

END IF;

END;

CALL sclevel(69.9,@r);SELECT @r;

3、存储过程的循环语句

存储过程循环语法:

sql 复制代码
WHILE 循环条件

DO

循环语句体;

END WHILE;

注意:

通过定义一个控制变量控制循环次数(循环控制变量)

sql 复制代码
DECLARE i INT DEFAULT 0;

WHILE i<=99

DO

循环语句体;

SET i=i+1;

END WHILE;

三、存储过程调用

语法:

call 数据库名.存储过程名(参数1,参数2,...);

select 返回参数1,返回参数2...;

注意:

对于存储过程提供的临时变量而言,MySQL规定要加上@开头

例:两个数相加

sql 复制代码
delimiter@@ #重置命令结束标记

CREATE PROCEDURE addnum(IN num1 INT,IN num2 INT,OUT res INT)

BEGIN

DECLARE r INT;#声明变量

SET r:=num1+num2;

SET res:=r;

END@@

delimiter;
sql 复制代码
CALL addnum(1,2,@r);

SELECT @r;

例:定义一个存储过程,可以实现计算1+2+3+...+9999

sql 复制代码
CREATE PROCEDURE addsum(OUT res INT)

BEGIN

DECLARE i INT DEFAULT 1;

DECLARE sum_i INT DEFAULT 0;

WHILE i<=9999 DO

SET sum_i=sum_i+i;

SET i=i+1;

END WHILE;

SET res=sum_i;

END;
sql 复制代码
CALL addsum(@r);SELECT @r;

四、存储过程显示和删除

显示存储过程:

sql 复制代码
SHOW PROCEDURE STATUS;

删除存储过程:

sql 复制代码
DROP PROCEDURE [IF EXISTS] 存储过程名;
相关推荐
仍然.几秒前
MYSQL--- 聚合查询,分组查询和联合查询
数据库
一 乐5 分钟前
校园二手交易|基于springboot + vue校园二手交易系统(源码+数据库+文档)
java·数据库·vue.js·spring boot·后端
啦啦啦_99997 分钟前
Redis-0-业务逻辑
数据库·redis·缓存
自不量力的A同学39 分钟前
Redisson 4.2.0 发布,官方推荐的 Redis 客户端
数据库·redis·缓存
Exquisite.41 分钟前
Mysql
数据库·mysql
全栈前端老曹1 小时前
【MongoDB】深入研究副本集与高可用性——Replica Set 架构、故障转移、读写分离
前端·javascript·数据库·mongodb·架构·nosql·副本集
R1nG8631 小时前
CANN资源泄漏检测工具源码深度解读 实战设备内存泄漏排查
数据库·算法·cann
阿钱真强道1 小时前
12 JetLinks MQTT直连设备事件上报实战(继电器场景)
linux·服务器·网络·数据库·网络协议
逍遥德2 小时前
Sring事务详解之02.如何使用编程式事务?
java·服务器·数据库·后端·sql·spring
笨蛋不要掉眼泪2 小时前
Redis哨兵机制全解析:原理、配置与实战故障转移演示
java·数据库·redis·缓存·bootstrap