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] 存储过程名;
相关推荐
逐米时代8 分钟前
BOM智能构建:全链路一致性自动校验
大数据·数据库·人工智能
SelectDB技术团队27 分钟前
StarRocks 迁移至 Apache Doris 完整指南:三步完成结构、数据与业务平滑切换
数据库·人工智能·sql·clickhouse·apache doris·selectdb·湖仓架构升级
Gauss松鼠会32 分钟前
GaussDB 系统表与系统视图详解(内网运维版)
运维·服务器·网络·数据库·gaussdb·经验总结
倔强的石头_32 分钟前
OceanBaseVS金仓:同一条复杂 SQL,为什么架构选择会改变延迟曲线
数据库
+VX:Fegn089542 分钟前
计算机毕业设计|基于springboot + vue图书借阅管理系统(源码+数据库+文档)
数据库·vue.js·spring boot·后端·课程设计
李金虎_1 小时前
大模型搜索时代的 GEO 工程实践:从零搭建仿真环境到可控变量的完整复盘
数据库·机器学习
YangYang9YangYan1 小时前
商业分析师校招拆解|2026 秋招 Python 要求、工具栈与面试考点
数据库·人工智能·数据分析
星光开发者1 小时前
基于Spring Boot的充电桩管理系统的设计与实现-计算机毕设【课程设计】57105
vue.js·spring boot·vscode·mysql·django·php·express
imDwAaY1 小时前
MySQL MVCC 详解:原理、版本链、Read View 与可见性判断
数据库·sql·mysql
foolishlee1 小时前
SCRAM-SHA-256
数据库·算法·postgresql