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 小时前
CentOS7 离线安装 Postgresql 指南
数据库·postgresql
E___V___E2 小时前
MySQL数据库入门到大蛇尚硅谷宋红康老师笔记 高级篇 part 2
数据库·笔记·mysql
m0_748254882 小时前
mysql之如何获知版本
数据库·mysql
小金的学习笔记2 小时前
如何在本地和服务器新建mysql用户和密码
运维·服务器·mysql
mikey棒棒棒3 小时前
Redis——优惠券秒杀问题(分布式id、一人多单超卖、乐悲锁、CAS、分布式锁、Redisson)
数据库·redis·lua·redisson·watchdog·cas·并发锁
星星点点洲3 小时前
【操作幂等和数据一致性】保障业务在MySQL和COS对象存储的一致
java·mysql
水手胡巴4 小时前
oracle apex post接口
数据库·oracle
_院长大人_4 小时前
Docker Mysql 数据迁移
mysql·adb·docker
史迪仔01126 小时前
【SQL】SQL多表查询
数据库·sql
Quz7 小时前
MySQL:修改数据库默认存储目录与数据迁移
数据库·mysql