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] 存储过程名;
相关推荐
雷工笔记1 小时前
MES 系统 设备保养管理模块详细设计方案
运维·数据库
晚风_END3 小时前
Linux|操作系统|zfs文件系统的使用详解
linux·运维·服务器·数据库·postgresql·性能优化·宽度优先
晚风_END9 小时前
Linux|操作系统|最新版openzfs编译记录
linux·运维·服务器·数据库·spring·中间件·个人开发
dLYG DUMS9 小时前
DBeaver连接本地MySQL、创建数据库表的基础操作
数据库·mysql
苍煜10 小时前
MySQL分库分表和ES到底怎么选?
数据库·mysql·elasticsearch
茉莉玫瑰花茶10 小时前
Qt 信号与槽 [ 1 ]
开发语言·数据库·qt
czlczl2002092510 小时前
松散索引扫描/跳跃索引扫描
数据库·mysql·性能优化
苍煜11 小时前
二叉树、红黑树、B树、B+树通俗教学:各自适配场景+MySQL索引终极选型原因
数据结构·b树·mysql
星马梦缘12 小时前
数据库作战记录 实验7、8
数据库·sql·oracle
安逸sgr13 小时前
Hermes Agent + Obsidian 打造第二大脑(六):分层记忆系统的设计逻辑——L0/L1/L2/L3 四层记忆详解
数据库·agent·知识库·hermes·hermesagent