[MYSQL]存储过程使用范例
2017-07-11 23:59
405 查看
存储过程封装了一系列的数据库操作,这样既方便了程序中调用,也加快了数据库访问速度。同时一些简单的逻辑修改也不用直接修改程序,直接修改存储过程即可。
CREATE DEFINER=`admin`@`%` PROCEDURE `addrankex`(in _gameid varchar(32), in _deviceid varchar(64), in _ip varchar(32), in _level int, in _score int, in _cleartime int) BEGIN declare _errcode int default 0; #发生异常时_errcode置1 declare continue handler for sqlexception set _errcode = 1;#非声明语句必须放在所有声明语句的后面,否者会报错。 start transaction; #初始化参数 set @deviceid = _deviceid; set @ip = _ip; set @level = _level; set @score = _score; set @cleartime = _cleartime; set @sameusercount = 0; set @currenttime = now(); set @best = 0; set @current = 0; set @strsql = concat('select count(*) into @sameusercount from ', _gameid, '_rank where deviceid=@deviceid and level=@level'); prepare stmt from @strsql; execute stmt; deallocate prepare stmt; if @sameusercount > 0 then #更新 set @strsql = concat('update ', _gameid, '_rank set score=@score,cleartime=@cleartime,ip=@ip,time=@currenttime where deviceid=@deviceid and level=@level and score<@score'); prepare stmt from @strsql; execute stmt; deallocate prepare stmt; else #添加 set @strsql = concat('insert into ', _gameid, '_rank (deviceid, level, score, cleartime, ip, count, time) values (@deviceid, @level, @score, @cleartime, @ip, 1, @currenttime)'); prepare stmt from @strsql; execute stmt; deallocate prepare stmt; end if; set @strsql = concat('update ', _gameid, '_rank set count=count+1 where deviceid=@deviceid and level=@level'); prepare stmt from @strsql; execute stmt; deallocate prepare stmt; #错误处理 if _errcode = 0 then commit;#提交 set @strsql = concat('select (count(*) + 1) into @best from ', _gameid, '_rank where deviceid!=@deviceid and level=@level and score>(select score from ', _gameid, '_rank where deviceid=@deviceid and level=@level)'); prepare stmt from @strsql; execute stmt; deallocate prepare stmt; set @strsql = concat('select (count(*) + 1) into @current from ', _gameid, '_rank where deviceid!=@deviceid and level=@level and score>@score'); prepare stmt from @strsql; execute stmt; deallocate prepare stmt; select @current as current,@best as best; else rollback;#回滚 select _errcode as errcode; end if; END
相关文章推荐
- mysql存储过程使用select ... into语句为变量赋值范例
- 使用MySQL存储过程创建动态交叉表(2)
- 使用MySQL存储过程连续插入多条记录
- MySQL存储过程中使用事务
- Mysql存储过程(六)——存储过程中使用临时表
- MYSQL存储过程中 使用变量 做表名
- MySQL 的存储过程写法和Cursor的使用
- MYSQL存储过程使用动态SQL 建多表
- MySQL存储过程和触发器使用释疑
- MySQL 存储过程中使用游标
- mysql存储过程中使用临时表
- Mysql存储过程中游标的使用以及错误处理
- mysql 存储过程中 使用变量做表明[学习记录]
- MySQL 的存储过程写法和Cursor的使用
- mysql输入输出参数存储过程简单使用
- MySql 存储过程使用游标循环插入数据示例
- 使用游标实现 mysql 存储过程中的循环
- Mysql存储过程优化——使用临时表代替游标
- MySQL存储过程中使用游标和临时表
- AdoHelper使用MySQL存储过程示例