目录
[2.1 双分支IF语句](#2.1 双分支IF语句)
[2.2 多分支IF语句](#2.2 多分支IF语句)
一、存储过程定义
存储过程(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] 存储过程名;