存储过程(习题)计算两数之和、循环、判断、赋值查询。

存储过程
一 存储过程的优缺点
优点:简化复杂的操作;缺点:如果使用大量存储过程,那么使用这些存储过程的每个连接的内存使用量将会大大增加,不利于逻辑运算。
二、MySQL 中的存储过程
1:创建存储过程,代码如下所示:

-- 创建存储过程
create procedure mypro(in a int,in b int,out sum int)
begin
set sum = a+b;
end;

运行结果如下:
在这里插入图片描述
也可以在 Navicat 客户端“函数”节点下查看过程,如下图所示:
在这里插入图片描述
(2)调用存储过程,代码如下所示:

call mypro(1,2,@s);-- 调用存储过程
select @s;-- 显示过程输出结果

运行结果如下:
在这里插入图片描述
存储过程语法解析:
1:create procedure 用来创建过程。
2:mypro 用来定义过程名称。
3:(in a int,in b int,out sum int)表示过程的参数,其中 in 表示输入参数,out 表示输出参数。类似于 Java 定义方法时的形参和返回值。
4:begin 与 end 表示过程主体的开始和结束,相当于 Java 定义方法的一对大括号。
5:call 用来调用过程,@s 是用来接收过程输出参数的变量。
存储过程的参数
MySQL 存储过程的参数用在存储过程的定义,共有三种参数类型:
1:IN 输入参数:表示调用者向过程传入值(传入值可以是字面量或变量)。
2: OUT 输出参数:表示过程向调用者传出值(可以返回多个值)(传出值只能是变量)。
3: INOUT 输入输出参数:既表示调用者向过程传入值,又表示过程向调用者传出值(值只能是变量)。
变量
(1) 变量定义

DECLARE variable_name [,variable_name...] datatype [DEFAULT value];

1:declare 用于声明变量;
2:variable_name 表示变量名称;
3:datatype 为 MySQL 的数据类型;
4:default 用于声明默认值;
5: 例如:declare name varchar(20) default ‘jack’。
(2) 变量赋值

SET 变量名 = 表达式值 [,variable_name = expression ...]

在存储过程中使用变量,代码如下所示:

use schooldb;-- 使用 schooldb 数据库
-- 创建过程
create procedure mypro1()
begin
declare name varchar(20);
set name = '丘处机';
select * from studentinfo where studentname = name;
end;
-- 调用过程
call mypro1();

运行结果如下:
在这里插入图片描述
流程控制语句
(1) if 条件语句
IF 语句包含多个条件判断,根据结果为 TRUE、FALSE 执行语句,与编程语言中的 if、else if、else 语法类似。

一:定义存储过程,输入一个整数,使用 if 语句判断是正数还是负数,代码如下所示:

-- 创建过程
create procedure mypro2(in num int)
begin
if num<0 then -- 条件开始
select '负数';
elseif num=0 then
select '不是正数也不是负数';
else
select '正数';
end if;-- 条件结束
end;
-- 调用过程
call mypro2(-1);

运行结果如下:
在这里插入图片描述
(2)case 条件语句
case 是另一个条件判断的语句,类似于编程语言中的 choose、when 语法。MySQL 中的 case 语句有两种语法格式。
一:定义存储过程,输入一个整数,使用 case 语句判断是正数还是负数,代码如下所示

-- 创建过程
create procedure mypro3(in num int)
begin
case -- 条件开始
when num<0 then select '负数';
when num=0 then select '不是正数也不是负数';
else select '正数';
end case; -- 条件结束
end;
-- 调用过程
call mypro3(1);

运行结果如下
在这里插入图片描述
(3) while 循环语句
一定义存储过程,使用 while 循环输出 1 到 10 的累加和,代码如下所示:

create procedure mypro5(out sum int)
begin
declare num int default 0;
set sum = 0;
while num<10 do -- 循环开始
set num = num+1;
set sum = sum+num;
end while; -- 循环结束
end;
-- 调用过程
call mypro5(@sum);
-- 查询变量值
select @sum;

运行结果如下
在这里插入图片描述
定义存储过程,使用 repeat 循环输出 1 到 10 的累加和,代码如下所示:

-- 创建过程
create procedure mypro6(out sum int)
begin
declare num int default 0;
set sum = 0;
repeat-- 循环开始
set num = num+1;
set sum = sum+num;
until num>=10
end repeat; -- 循环结束
end;
-- 调用过程
call mypro6(@sum);
-- 查询变量值
select @sum;

定义存储过程,使用 loop 循环输出 1 到 10 的累加和,代码如下所示:

-- 创建过程
create procedure mypro7(out sum int)
begin
declare num int default 0;
set sum = 0;
loop_sum:loop-- 循环开始
set num = num+1;
set sum = sum+num;
if num>=10 then
leave loop_sum;
end if;
end loop loop_sum; -- 循环结束
end;
-- 调用过程
call mypro7(@sum);
-- 查询变量值
select @sum;

显示存储过程,代码如下所示:

SHOW PROCEDURE STATUS;

显示特定数据库的存储过程,代码如下所示:

SHOW PROCEDURE status where db = 'schooldb';

显示存储过程“mypro1”的源码,代码如下所示:

SHOW CREATE PROCEDURE mypro1;

删除存储过程“mypro1”,代码如下所示:

drop PROCEDURE mypro1;
  • 2
    点赞
  • 16
    收藏
    觉得还不错? 一键收藏
  • 7
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 7
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值