11)-MySQL存储过程

Posted 奢华使命

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了11)-MySQL存储过程相关的知识,希望对你有一定的参考价值。

创建存储过程


create procedure productpricing()   #定义存储过程函数名称
begin   #存储开始
   select avg(prod_price) as priceaverage   
   from products;    #mysql语句
end;  #结束
 
shell模式下执行mysql语句注意:分隔符

  delimiter //
   create procedure productpricing()
   begin
      select avg(prod_price) as priceaverage
      from products;
   end //
   delimiter ;
 
DELIMITER//告诉命令行实用程序使用//作为新的语句结束分隔符
可以看到标志存储过程结束的END定义为END//而不是END;
这样,存储过程体内的;仍然保持不动,并且正确地传递给数据库引擎。
最后,为恢复为原来的语句分隔符,可使用DELIMITER;。
 
调取存储过程

 call avg_student()  #通过关键词call调取存储过程名称  
 
# 因为存储过程实际上是一种函数,所以存储过程名后需要有()符号(即使不传递参数也需要)。

删除存储过程


 drop procedure productpricing;  
 
这条语句删除刚创建的存储过程。请注意没有使用后面的(),只给出存储过程名。

检查存储过程

show create procedure ordertotal;
 
存储过程例子(1)

create procedure ordertotal(
   in onumber int,          #in 用来接收用户输入
   out ototal decimal(8,2)  #out用来返回用户输入
)
begin
   select sum(item_price*quantity)
   from orderitems
   where order_num = onumber
   into ototal;             #into用来接收值
end;
 
调取

CALL ordertotal(20005, @total);
 
存储过程例子(2)
 
create procedure ordertotal(
   in onumber int,           #接收用户值
   in taxable boolean,
   out ototal decimal(8,2)   #返回值
)
begin
   declare total decimal(8,2);     #定义局部变量
   declare taxrate int default 6;   #定义局部变量
   select sum(item_price*quantity)
   from orderitems
   where order_num = onumber
   into total;     #存储值
   if taxable then    #if判断
      select total+(total/100*taxrate) into total;
   end if;
   select total into ototal;
end;
 
调取

call ordertotal(20005, 0, @total);
select @total;

以上是关于11)-MySQL存储过程的主要内容,如果未能解决你的问题,请参考以下文章

Mysql的存储过程的使用

MySQL 存储过程乘法

MySQL 初步认识存储过程

MySQL 从另一个存储过程调用存储过程

MySQL 在 select 语句中使用存储过程

MySQL 存储过程