概述
文章目录
目录
文章目录
存储过程
1,什么是存储过程?
2,使用存储过程的好处
一、基本语法
一、创建
二、查询
三、调用
四、删除
五、定义变量
六、给变量赋值
五、案例
二、参数和变量
一、参数
一、分类
二、案例
二、变量
一、分类:
二、定义变量
1、用户变量
2、局部变量
三、控制语句
一、if
语法
案例
二、case
语法
案例
三、while
语法
案例
四、repeat
语法
案例
五、loop
语法
案例
四、存储函数
语法
案例
和存储过程的区别
存储过程
1,什么是存储过程?
事先经过编译存储在数据库中的一段sql语句集合。简单来说就是一组封装好的sql语句,类似与java的函数。
2,使用存储过程的好处
2.1、实现代码的封装和复用。
2.2、减少网络交互,提高效率。
一、基本语法
一、创建
create procudure 名称([参数])
begin
sql代码
end;
二、查询
show create procedure 名称;
select * from information_schema.routines where routine_schema = 'dbName'; -- 查询数据库中所有存储过程和函数
三、调用
call 名称([参数]);
四、删除
drop procedure 名称;
五、定义变量
declare 变量名 int [default 1];
default:代表给变量赋初值
六、给变量赋值
set 变量名 = 1;
五、案例
下面创建了一个名称为test的存储函数。
-- 创建
create procedure test()
begin
select * from emp ;
end;
-- 查看
show create procedure test;
-- 调用
call test();
-- 删除
drop procedure test;
二、参数和变量
一、参数
一、分类
* in 含义:用户传入参数
* out 含义:用于传出值
* inout 含义:即传入值又传出值
二、案例
-- test用于计算x,y的和,并将和赋值给sum
create procedure test(in x int,in y int,inout sum int)
sum = x + y;
end;
-- 定义用户变量
set @a=1;
set @b=1;
set @c=0;
-- 指定存储过程
call test(a,b,c);
查询c的值,发现c为2.
select c;
二、变量
一、分类:
系统变量:系统内置变量。
用户变量:在当前回话创建的变量叫做用户变量,仅在当前回话有效。
局部变量:在存储过程中创建的变量叫做局部变量,仅在存储过程中有效。
二、定义变量
1、用户变量
用户定义的,使用时不用提前声明,用的时候直接用 "@变量名" 即可,并且其作用域为当前会话,可以通过=和:=两种方式赋值
-- 设置变量value
set @名称 = value;
set @名称 := value;
-- 设置变量value
select @名称:=value;
select 字段 into @名称 from 表名;
案例:
set @a = 1;
set @b :=2;
select @c=3;
select id into @d form student;
2、局部变量
注意:使用局部变量需要定义,定义变量必须要在存储过程最前面。
declare 变量名 int [default 1];
default:代表给变量赋初值
set 名称 :=value;
select 字段 into 名称 from 表名;
案例,定义a变量并赋值1;定义了b、c变量但是没有赋值,并通过两种不同的方法赋值。
create test
begin
declare a int default 1;
declare b int;
declare c int ;
set b:=2;
select id into c from student;
end;
三、控制语句
一、if
语法
if 条件 then
...
elseif 条件 then
...
elseif 条件 then
...
else
...
end if;
案例
create procedure ifTest(in a int,out s varchar(20))
begin
if a < 1000 then set s='低薪';
elseif a<2000 then set s='中薪';
else set s = '高薪';
end if;
end;
set @sal = 1500;
call ifTest(@sal,@salGrade);
select @salGrade;
二、case
语法
CASE
WHEN 条件 THEN 满足
WHEN 条件 THEN 满足
WHEN 条件 THEN 满足
ELSE 其他
END CASE;
案例
create procedure useOtherCase(in paramOne int,out result varchar(30))
BEGIN
CASE
WHEN paramOne<0 THEN set result = '小于0';
WHEN paramOne<10 THEN set result = '小于10';
ELSE set result = '其他';
END CASE;
END;
call useOtherCase(1,@result);
select @result;
三、while
语法
while 条件 do
...
end while;
案例
create procedure whileTest(in x int,in y int,inout sum int)
begin
declare a int default x;
declare b int default y;
while b>=a
do
set sum = sum + a;
set a=a+1;
end while;
end;
set @a_b_sum = 1;
call whileTest(2,8,@a_b_sum);
select @a_b_sum;
四、repeat
和do while一样,循环必须会执行一次。
语法
repeat
...
until 退出条件
end repeat;
案例
create procedure repeatTest(in x int ,in y int,inout sum int)
begin
declare a int default x;
declare b int default y;
repeat
set sum=sum*sum;
until sum>a*b
end repeat;
end;
set @sum = 2;
call repeatTest(4,5,@sum);
select @sum;
五、loop
语法
-- leave 相当于break; iterate 相当于continue
label: LOOP
....
IF exit_condition THEN
LEAVE label; -- break;
ELSE
ITERATE label; -- continue
END IF;
END LOOP label;
案例
create procedure loopTest(in min int,in max int ,inout result int)
begin
declare i int default min;
xx: LOOP
IF i>max THEN
LEAVE xx;
elseif i%2=0 then
set result=result+i;
set i=i+2;
else
set i=i+1;
END IF;
END LOOP xx;
end;
-- 如果给result设置初始值,记得参数要用inout。
set @result = 0;
call loopTest(2,17,@result);
select @result;
四、存储函数
和存储过程一样,不过需要要有返回值
语法
CREATE FUNCTION 存储函数名称 ([参数列表 ])
RETURNS type [characteristic ...]
begin
N条SQL语句
return ...
end;
案例
-- 调用函数返回员工数量
create function myCount(deptnoParam int )
returns INTEGER DETERMINISTIC
BEGIN
declare xx int;
select count(*) into xx from emp where deptno = deptnoParam;
return xx;
END;
-- 调用
select myCount(10) from dual;
和存储过程的区别
-
需要声明返回类型
-
必须要有return
- 参数只能是in,(可以省略)
最后
以上就是洁净含羞草为你收集整理的mysql存储过程(通俗易懂)存储过程一、基本语法二、参数和变量三、控制语句四、存储函数的全部内容,希望文章能够帮你解决mysql存储过程(通俗易懂)存储过程一、基本语法二、参数和变量三、控制语句四、存储函数所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复