我是靠谱客的博主 洁净含羞草,最近开发中收集的这篇文章主要介绍mysql存储过程(通俗易懂)存储过程一、基本语法二、参数和变量三、控制语句四、存储函数,觉得挺不错的,现在分享给大家,希望可以做个参考。

概述

文章目录

目录

文章目录

存储过程

   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存储过程(通俗易懂)存储过程一、基本语法二、参数和变量三、控制语句四、存储函数所遇到的程序开发问题。

如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。

本图文内容来源于网友提供,作为学习参考使用,或来自网络收集整理,版权属于原作者所有。
点赞(52)

评论列表共有 0 条评论

立即
投稿
返回
顶部