数据库存储过程

目录

简介

语法

总结


简介

存储过程和函数:类似于java中的方法

好处:

 1、提高代码的重用性

2、简化操作

3、减少了编译次数并且减少了和数据库服务器的连接次数,提高了效率

#存储过程

含义:一组预先编译好的sql语句的集合,理解成批处理语句

语法

#一、创建语法

create procedure 存储过程名 (参数列表)

 begin       / /begin就相当于大括号

              存储过程体

 end

注意:

1、参数列表包含三部分

参数模式、参数名、参数类型

举例:

  IN stuname varchar(20)

1、参数模式:

IN  在 :该参数可以作为输入,也就是改参数需要调用方传入值

OUT 出来  出口:改参数可以作为输出,也就是该参数可以作为返回值

INOUT    :该参数既可以作为输入又可以作为输出,也就是改参数既需要传入值,又可以返回值

2、如果存储过程体仅仅一句话,begin end可以省略

存储过程体中的每条SQL语句的结尾必须加分号

存储过程的结尾可以使用DELIMTTER重新设置

语法:

  DELIMITER结束标记

案例:

 DELIMITER $ 这里标识$是结束标记

二、调用语法

CALL 存储过程名(实参列表);

#1. 空餐列表

#案例:插入到admin表中五条记录

DELIMITER $

create procedure mypl()

begin

    insert into admin(username,password) values('j',0),('s',2),('j',0),('s',2),('j',0);

end $

call myp1()$

#创建带in模式参数的存储过程

传递参数得到对应信息

create procedure myp2(in beautyname varchar(20))

begin

     select bo.*

    from boys boauty b on bo.id=b.boyfrinend_id

   where b.name=beautyname

end $

调用: call myp2('xiaoming')$

声明初始化和赋值

create procedure myp3(in username varchar(20),in password varchar(20))
begin
    declare result  int  default 0; #声明并初始化
     select count(*) into result #赋值
      from admin
      where amdin.username=username
      and admin.password=password;
      select if(result>0,'成功','失败');   #使用

end

 #创建带out模式的存储过程

案例:根据一个名返回对应的名

create procedure myp5(in name varchar(20),out boyname)

begin

      select bo.name into boyname    将查询结果注入到boyname里面

      select bo.name, bo.usercp into b1,b2   将两个值注入到b1和b2里面

      from boys bo

      innert join beatu*****

end

#调用

set@bname$

call myp5('小赵',@bname)$   #调用了

select @bname$  #查看

带inout模式参数的存储过程

传入a和b 两个值,最终a和b都翻倍并返回

create procedure myp8(inout a int, inout b int)

begin

       set a=a*2;

       set b=b*2;

end;

调用(传值是变量不能是常量 因为要修改)

set @m=10$;

set @n=20$;

call myp8(@m,@n)$;

总结

in out inout 参数  比如in name varchar(20)

DELIMITER $   #声明结束是以$结束

create procedure myp1(in name1 varchar(20),out boyname)

begin

        declare result  int  default 0; #声明并初始化

       select name into name1  #将查询结果name赋值给name1

       from *****

end $

调用:   in 和inout需要提前声明

set@bname$   #提前声明

call myp5('小赵',@bname)$  #调用

select @bname$  #查看

在存储过程中,如果提前声明则不需要加@,对于@可以不用声明,比如@a=10;在if中@a为10,但如果直接if a=10是错的,同理如果没有加@,在if中也不能加@

declare t varchar(200) default '';

对于if还是一个一个的判断为好;if a=10 then set b=10;set c=20;end if;这样能执行两条;

drop PROCEDURE addresulttest;
delimiter $
CREATE PROCEDURE addresulttest(in n int,out sum int)
BEGIN 
 declare i int;
 set i=1;
 set sum=0;
while i<=n DO 
 set sum=sum+i;
 set i=i+1;
end WHILE;

SELECT sum;
END $
delimiter;
set@sum=-1;
call addresulttest(10,@sum);
delimiter ;
@sum  ;
drop PROCEDURE storetest;
delimiter $

CREATE PROCEDURE storetest()

BEGIN 
declare s int ;
declare t varchar(200) default '';
declare i int;
declare n int;
declare sum int;
declare m int;
set i=0;
set sum=0;
set n=10;
select pass from user where userid="admin";
insert into user VALUES("admin3","admin3");



/*where循环*/
WHILE i<=n and i>=0 DO
set sum=sum+i;
set i=i+1;
end while;
/*case选择*/

set @q=10;

if @q=10  then  set i=100; set sum=100;end if;

SELECT i;
SELECT sum;
END $

delimiter;
call storetest();
delimiter ;

设置离开标志

在begin前面加上一个名:,在合适的位置加上leave和那个标志便可以离开,这时候前面的修改都有效


drop PROCEDURE storetest;
delimiter $
create  PROCEDURE storetest(
in username varchar(30),inout lea int)

leave_lable:BEGIN 
  declare insert_result int default 10;
  set @a=null;
  set @b=null;

  SELECT userid into @a from user where userid=username;
/*如果找不到用户名则不再插入*/
    if @a is null THEN set insert_result=0; set lea=100;LEAVE leave_lable; end if;
  
  SELECT insert_result;
END $

delimiter;
set @lea=10;
call storetest("admin5",@lea);
SELECT @lea;
delimiter ;

条件判断

全部改变,不用if和else了,用case when

不需要加case,符合某一个条件执行完后面的内容会自动跳出case

case 
when @a is null then set @c=10;set @d=10;
/*when 条件2 then执行下面内容*/
else set @c=20;set @d=20;
end case;

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

贪睡的蜗牛

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值