优点
提高代码可复用性
简化操作
减少编译次数和数据库服务器的连接次数,提高了效率
缺点
可移植性差,不通数据库之间往往不兼容
定义
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;
网友评论