Mysql数据库 10.SQL语言 储存过程 中 流程控制

存储过程中的流程控制

在存储过程中支持流程控制语句用于实现逻辑的控制

一、分支语句

语法:if-then-else

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第1张图片

1.单分支语句

语法

if conditions then

             ——SQL

end if;

if conditions then

             ——SQL

end if;

——如果参数a的值为1,则添加一条班级信息

案例

创建一个储存过程,如果参数a的值为1,则添加一条班级信息

代码实现
创建存储过程
#创建一个储存过程
create procedure proc_test7(in a int)
begin
	#单分支 if语句
	if a=1 then
		insert into classes(name,class_remark) values('Java2204','test');
	end if;
end;
#———如果参数a的值为1,则添加一条班级信息
调用存储过程
#调用存储过程
call proc_test7 (1);
call proc_test7 (2);
运行结果
创建存储过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第2张图片

调用存储过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第3张图片

2.双分支语句

双分支:如果条件成立执行SQL1,否则执行SQL2

语法

if conditions then 

        ——SQL1

else

        ——SQL2

end if;

if conditions then 

        ——SQL1

else

        ——SQL2

end if;
案例

如果参数为1,创建学生信息,如果参数不为1,创建班级信息

代码实现
创建存储过程
#创建存储过程
create procedure proc_test8(in a int)
begin
	if a=1 then
		insert into classes(name,class_remark) values('Java2208','test');
	else
		insert into students(stu_num,name ,stu_gender,stu_age,cid)
		values('20220110','小虎','女',19,1);
	end if;
end;

调用存储过程
#调用储存过程
call proc_test8 (1); 
call proc_test8 (3);
运行结果
创建存储过程Mysql数据库 10.SQL语言 储存过程 中 流程控制_第4张图片
调用储存过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第5张图片Mysql数据库 10.SQL语言 储存过程 中 流程控制_第6张图片

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第7张图片Mysql数据库 10.SQL语言 储存过程 中 流程控制_第8张图片

3.switch case语句

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第9张图片
语法

create procedure 储存过程名(参数)

begin

        case a

                when 1 then

                        执行的SQL语句1;

                when 2 then

                        执行的SQL语句2;

                else

                        执行的SQL语句3;

        end case;

end;

create procedure 储存过程名(参数)

begin

        case a

                when 1 then

                        执行的SQL语句1;

                when 2 then

                        执行的SQL语句2;

                else

                        执行的SQL语句3;

        end case;

end;
案例

case 多分支语句

代码实现
创建储存过程
create procedure proc_test9(in num int)
begin
	case num
		when 1 then
		#如果a的值为1,执行以下操作
			insert into classes(name,class_remark) values('Java2208','test');
		when 2 then
		#如果a的值为2,执行以下操作
			insert into students(stu_num,name ,stu_gender,stu_age,cid)
			values('20220111','小刚','男',22,2);
		else
		#如果a的值不为1也不为2,执行以下操作
			update students set stu_age=18 where stu_num ='20220110';
			#修改学生年龄
	end case;
end;
调用储存过程
#调用储存过程
call proc_test9 (2);
call proc_test9 (3);
运行结果
创建储存过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第10张图片

调用储存过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第11张图片Mysql数据库 10.SQL语言 储存过程 中 流程控制_第12张图片

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第13张图片

二、循环语句

1.while循环

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第14张图片

语法

create procedure 储存过程名(传递的参数)

begin

        declare i int        #局部变量

                set i=0        #局部变量赋值

                while 循环条件 do

                        SQL语句

                end while;        #结束循环

        end;                        #结束储存过程

create procedure 储存过程名(传递的参数)

begin

        declare i int        #局部变量

                set i=0        #局部变量赋值

                while 循环条件 do

                        SQL语句

                end while;        #结束循环

        end;                        #结束储存过程

案例
代码实现
创建储存过程
#while循环 创建储存过程
create procedure proc_test10(in num int)
begin
	declare i int;
	set i=0;
	while i
调用储存过程
#调用储存过程
call proc_test10 (4);
运行结果
创建储存过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第15张图片

调用储存过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第16张图片

执行结果
Mysql数据库 10.SQL语言 储存过程 中 流程控制_第17张图片

编号自动增加

2.repeat循环

案例
代码实现
创建储存过程
#repeat循环
#创建储存过程
create procedure proc_test11(in num int)
begin
	declare i int;
	set i=1;
	repeat
		insert into classes (name,class_remark)
			values(concat('C++',i),'......');
		#concat()拼接字符串函数
		set i=i+1;
	#循环结束条件 类似于do while语句
	until i>num
	end repeat;
end;
调用储存过程
#调用储存过程
call proc_test11 (4);
运行结果
创建储存过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第18张图片

调用储存过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第19张图片

执行结果

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第20张图片

3.loop循环

语法

create procedure 储存过程名(参数)

begin

        declare i int;        #定义局部变量

        set i=0;                #赋值局部变量

        myloop:loop        #给loop循环起名

                执行的SQL语句;

                set i=i+1        #迭代语句

               if i=num then  #循环结束条件

                        leave myloop;

                end if;             #结束判断

        end loop;                #结束循环

end;

create procedure 储存过程名(参数)

begin

        declare i int;        #定义局部变量

        set i=0;                #赋值局部变量

        myloop:loop        #给loop循环起名

                执行的SQL语句;

                set i=i+1        #迭代语句

               if i=num then  #循环结束条件

                        leave myloop;

                end if;             #结束判断

        end loop;                #结束循环

end;
案例

创建储存过程

loop == 循环+判断

代码实现
创建储存过程
#创建储存过程
# loop == 循环+判断
create procedure proc_test12(in num int)
begin
	declare i int;
	set i=0;
	myloop:loop
		insert into classes (name,class_remark)
			values(concat('Python',i),'......');
		set i=i+1;
		if i=num then
			leave myloop;
		end if;
	end loop;
end;
调用储存过程
#调用储存过程
call proc_test12(4); 
运行结果
创建储存过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第21张图片

调用储存过程

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第22张图片 

执行结果

Mysql数据库 10.SQL语言 储存过程 中 流程控制_第23张图片

你可能感兴趣的:(Mysql数据库,数据库,mysql)