储存过程和函数就是数据器将一些处理封装起来,调用
调用储存过程只需要使用CALL,然后指定储存名称和参数,参数可以是IN、OUT和INOUT
调用储存函数只需要使用SELECT,指定名称和参数,储存函数必须有返回值,参数只能是IN
create procedure sp_name ([proc_parameter[,…]]) [characteristic …] routine_body
IN | OUT | INOUT param_name type
下面是创建一个储存过程的定义,在对应的工具中找到创建储存过程的地方。
create PROCEDURE SelectAllData()
begin
select * from t_goods;
end
创建好的储存过程

create function func_name (func_parameter[,…]) returns type [characteristic …] routine_body
declare var_name[,…] type [default value]
declare totalprice decimal(10,2) default 0.00;
创建一个储存过程使用变量的例子
CREATE DEFINER=`root`@`localhost` PROCEDURE `SelectCountAndPrice`()
begin
declare totalcount int default 0;
declare totalprice, avgprice decimal(10, 2) default 0.00;
select count(*) into totalcount from t_goods;
select sum(t_price) totalprice from t_goods;
set avgprice = totalprice / totalcount;
select totalprice,totalcount,avgprice;
end

declare condition_name condition for condition_value
declare exec_refused condition for sqlstate ‘48000’;
declare handler_type handler for condition_value[,…] sq_statement
sqlstate [value] sqlstate_value
condition_name
sqlwarning
not found
sqlexception
mysql_error_code
declare continue handler for sqlstate ‘29011’ set @log=’ database not found ’
CREATE DEFINER=`root`@`localhost` PROCEDURE `InsertDataNoCondition`()
BEGIN
set @x = 1;
insert into t_goodss (id,t_cate,t_remake,ages) values (3,'22','3333',10);
set @x = 2;
insert into t_goodss (id,t_cate,t_remake,ages) values (4,'22','3333',10);
set @x = 3;
END
储存过程查询数据打,使用游标对结果集循环处理。
declare cursor_name cursor for select_statement;
open cursor_name
fetch cursor_name into var_name[,…]
close cursor_name
定义一个StatisticsPrice的储存过程,参数是totalprice,定义cursor_price 游标,将查询的结果使用repeat 语句赋值于cursor_price,计算结果。
CREATE PROCEDURE StatisticsPrice(OUT totalprice DECIMAL(10, 2))
BEGIN
#Routine body goes here...
declare price decimal(10,2) DEFAULT 0.00;
declare cursor_price cursor for select t_price from t_goods;
declare exit HANDLER FOr not found close cursor_price;
set totalprice = 0.00;
open cursor_price;
repeat
FETCH cursor_price into price;
set totalprice= totalprice + price;
until 0 END repeat;
close cursor_price;
END
