Mysql存储过程 变量,条件,循环语句用法
数据库
删除存储过程
drop procedure 存储过程名
存储过程的下面代码是打印到控制台
select num;
查看所有数据库的存储过程
show procedure status;
查看存储过程创建的源代码
show create procedure 存储过程名
1、变量的 声明
Declare 声明局部变量
begin end 里面
在符合语句的开头,在任何其他语句之前
Declare 变量名 类型[default value];
例题:
Declare a int default 5;
Delimiter $$
Create procedure selectall()
begin
Declare a int default 5;
select a;
end$$
call selectall()$$
2、set的用法
set 变量名 = 表达式的值
例题
Delimiter $$
create procedure p1()
begin
declare a int;
set a = (select sno from student where sno = 201502);
select a;
end$$
call p1()$$
Delimiter $$
create procedure p3()
begin
declare a char;
set a = (select department from student where sno = 201502);
select a;
end$$
call p3()$$
课堂练习
1)建表T(S1,S2)
delimiter ;
create table T
(
S1 int,
S2 int
);
2)定义一个存储过程,声明两个变量a,b,并且设置a,b的初始值为5,将a的值插入表T的s1列,并且当S1>=b,求出S1*A的结果
delimiter $$
Create procedure tselect()
begin
declare a,b int default 5;
insert into T(S1) values(a);
select S1*a from T where S1>=b;
end$$
call tselect()$$
3)条件语句
语法:
IF 条件判断
THEN 执行语句
ELSE IF 条件判断
THEN 执行语句
ELSE 执行语句
END IF;
课堂练习 :
输入一个数,对num进行判断,
如果num=-1,往表T1中插入数据(num,666);
0 往表T1中插入数据(num,num+1)
1 往表T1中插入数据(num,num+2)
其他 往表T1中插入数据(num,num*5)
首先
创建表
delimiter ;
create table T1(num int);
创建存储过程
delimiter $$
create procedure insert_t1(in num1 int)
begin
if num1=-1 then
insert into t1(num) values(666);
elseif num1=0 then
insert into t1(num) values(num1+1);
Elseif num1=1 then
insert into t1(num) values(num1+2);
else insert into t1(num) values(num1*5);
end if;
end$$
call insert_t1(1)$$
课堂练习二
输入0,打印t1表
如果是其他,告诉用户,你的输入有误
delimiter $$
create procedure insert_t1(in num1 int)
begin
if num1=0 then
select * from t1;
else select '您的输入有误';
end if;
end$$
call insert_t1(1)$$
A、case 语句
case变量
when 值 then 语句
ELSE 语句
delimiter $$
create procedure p5(in num int)
begin
case num
when 0 then select * from student order by sno asc;
when 1 then select * from student order by sno desc;
else select '您的输入有误';
end case;
end$$
call p5(5)$$
// 查找JAVA的API关于调用存储过程
输入参数
输入参数
DEMO
4)循环
WHILE END WHILE
标准语法:
WHILE条件判断 DO 语句
END WHILE;
求出1+2+.....+100
delimiter $$
create procedure p6()
begin
Declare tem int default 1;
Declare sum int default 0;
while tem<=100 do
set sum=sum+tem;
set tem = tem+1;
End while;
select sum;
end$$
repeat end repeat
本身repeat util是do while的形式,意义不同,表示 一直循环到满足until后面的条件为止
标准格式;
REPEAT
语句;
until 判断条件
end repeat;
求出1+2+.....+100
delimiter $$
create procedure p7()
begin
Declare tem int default 1;
Declare sum int default 0;
repeat
set sum=sum+tem;
set tem = tem+1;
until tem>100
end repeat;
select sum;
end$$
call p7()$$
LOOP END LOOP
标签:
语法:
标签名称:LOOP
语句;
LEAVE 标签名称;
END LOOP;
注意 loop 一般要和一个标签(此处为label,名称可以自定义,不过要保证前后一致)一起使用,且在 loop 循环中一定要有一个判断条件,能够满足在一定的条件下跳出 loop 循环(即 leave )!
求出1+2+.....+100
delimiter $$
create procedure p8()
begin
Declare tem int default 1;
Declare sum int default 0;
label:loop
set sum=sum+tem;
set tem = tem+1;
if tem>100 then leave label;
end if;
end loop label;
select sum;
end$$
call p8()$$