欢迎进入linux社区论坛,与200万技术人员互动交流 >>进入 mysql存储过程的创建 (1)。 格式 mysql存储过程创建的格式:create procedure 过程名 ([过程参数[,…]]) [特性 …] 过程体 这里先举个例子: mysql delimiter // mysql create procedure proc1(
欢迎进入linux社区论坛,与200万技术人员互动交流 >>进入
mysql存储过程的创建
(1)。 格式
mysql存储过程创建的格式:create procedure 过程名 ([过程参数[,…]])
[特性 …] 过程体
这里先举个例子:
mysql> delimiter //
mysql> create procedure proc1(out s int)
-> begin
-> select count(*) into s from user;
-> end
-> //
mysql> delimiter ;
注:
(1)这里需要注意的是delimiter //和delimiter ;两句,delimiter是分割符的意思,因为mysql默认以;为分隔符,如果我们没有声明分割符,那么编译器会把存储过程当成sql语句进行处理,则存储过程的编译过程会报错,所以要事先用delimiter关键字申明当前段分隔符,这样mysql才会将;当做存储过程中的代码,不会执行这些代码,用完了之后要把分隔符还原。
(2)存储过程根据需要可能会有输入、输出、输入输出参数,这里有一个输出参数s,类型是int型,如果有多个参数用,分割开。
(3)过程体的开始与结束使用begin与end进行标识。
这样,我们的一个mysql存储过程就完成了,是不是很容易呢?看不懂也没关系,接下来,我们详细的讲解。
下面的例子主要用到了
ⅰ。 if-then -else语句
ⅰ。 found_rows() 语句
#记录每天的步行、睡眠、体重、消耗卡路里等信息
#userrecorddetail 表中,如果存在当天数据,则修改,否则新增
#userrecord 表中,如果存在,则累加,否则新增
#类型:1步行2睡眠3卡路里消耗4体重
#call userrecord_create(1001,45,100,1000,1000,500,500,2,1);
drop procedure if exists pro_userrecord_stepnum;
delimiter //
create procedure pro_userrecord_stepnum(in p_userid int,in p_stepnum int)
begin
declare rcount int;
-- 查看用户是否有详细记录
select id from userrecorddetail where userid = p_userid and date(createtime) = curdate() limit 1;
select found_rows() into rcount;
if (rcount=0) then
-- 查看userrecord是否有用户总记录信息,不存在,则添加,否则修改
select id from userrecord where userid = p_userid limit 1;
select found_rows() into rcount;
if(rcount = 0 )then
insert into `userrecord`(`userid`,`totalstep`,`updatetime`,`createtime`)
values (p_userid,p_stepnum,now(),now());
else
update userrecord set totalstep = totalstep+p_stepnum where userid = p_userid;
end if; -- 结束
-- 插入一条用户记录详细信息
insert into `userrecorddetail`(`weigh`,`calorie`,`stepnum`,`userid`,
`sleeptimes`,`lightsleeptimes`,`heavysleeptimes`,
`wakeupnum`,`updatetime`,`createtime`)
values (0,0,p_stepnum, p_userid,0,0,0,0,now(),now());
else
-- 查看是否有用户总记录信息,不存在,则添加,否则修改
select id from userrecord where userid = p_userid limit 1;
select found_rows() into rcount;
if(rcount = 0 )then
insert into `userrecord`(`userid`,`totalstep`,`updatetime`,`createtime`)
values (p_userid,p_stepnum,now(),now());
else
update userrecord set totalstep = totalstep + p_stepnum where userid = p_userid;
end if;
-- 修改userrecorddetail
update userrecorddetail set stepnum = stepnum + p_stepnum where userid = p_userid;
end if;
end;//
[1] [2] [3]
