daily -- mysql 基础 存储过程

2021-04-01  本文已影响0人  JackSpeed

优点

提高代码可复用性
简化操作
减少编译次数和数据库服务器的连接次数,提高了效率

缺点

可移植性差,不通数据库之间往往不兼容

定义

create procedure  存储过程名称(入参)
#入参:入参包含三部分,参数模式(IN、OUT、INOUT)、参数名、参数类型
#例子:IN  userName varchar(50)
begin 
  #sql语句,如果此处只有一条语句,则begin和end可以省略;SQL语句结束必须带分号;存储过程结尾用delimiter重新设置,例如:delimiter $;
end

调用

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

example 1

delimiter $
create procedure auto_insert_pro()
begin 
 insert into t_test (user_name,user_age)values('哈哈',22);
end $

example 2

delimiter $
create procedure select_pro(IN userName varchar(50))
begin 
  select * from t_test where user_name=userName;
end $
#调用
call select_pro('呵呵');

example 2

delimiter $
create procedure select_prod2(IN userName varchar(50,IN userAge int))
begin 
  #查询数据
  select * from t_test where user_name=userName and user_age=userAge;
end $
#调用
call select_prod2('呵呵',23);

example 3

delimiter $
create procedure select_prod3(IN userName varchar(50),IN userAge int)
begin 
  #声明变量,默认值为''
  declare  result varchar(40) default'';
  #查询数据并且赋值为result变量
  select count(*)  INTO  result 
   from t_test where user_name=userName and user_age=userAge;
  #使用变量result
  select result;
end $
#调用
call select_prod3('呵呵',23);

example 4

delimiter $
create procedure select_prod4(IN userName varchar(50),IN userAge varchar(50))
begin
    #声明变量,默认值为''
    declare  result int default  0;
    #查询数据并且赋值为result变量
    select count(*)  INTO  result
    from t_test where user_name=userName and user_age=userAge;
    #使用变量result
    select if(result>0,'存在用户','不存在用户');
end $
#调用
call select_prod4('呵呵','11');

example 5 带返回值查询

delimiter $
create procedure select_prod5(IN userName varchar(50),OUT userAge varchar(50))
begin
    select  user_age into userAge
    from t_test where user_name=userName;
end $
#调用
set @userAge =0;
call select_prod5('1',@userAge);

example 6 带多返回值查询

delimiter $
create procedure select_prod5(IN userName varchar(50),OUT userAge varchar(50),OUT userId int)
begin
    select  user_age ,user_id into userAge,userId
    from t_test where user_name=userName;
end $
#调用
set @userAge =0;
set @userId=0;
call select_prod6('2',@userAge,@userId);
select  @userAge,  @userId;

example 7 带INOUT

 delimiter $
create procedure select_prod7(INOUT a  int,INOUT  b int )
begin
    set a=a*2;
    set b=b*2;
end $
#调用
set @a =3;
set @b=100;
call select_prod7(@a,@b);
select  @a,  @b;
上一篇 下一篇

猜你喜欢

热点阅读