MySql存储过程例子1

delimiter //

drop procedure if exists p_PreLogin//

create procedure p_PreLogin( IN in_username varchar(32),
							 IN in_password varchar(32),
							 IN in_asshkey varchar(33),
							 IN in_usshkey varchar(33),
							 IN in_gameid tinyint,
							 IN in_logintype tinyint
							)
PROC_LABEL: begin
	declare result int default 0;
	declare res_aid int default 0;
	declare res_uid int default 0;
	declare res_srvid int default 0;
	declare res_status tinyint default 0;
	declare res_cnt int default 0;
	declare res_sshkey varchar(33) default NULL;

	declare res_ip varchar(16) default NULL;
	declare res_port int default 0;

	declare res_out int default 0;

	-- 根据 username 和 password 查询出 uid, aid , 找不到返回错误.
	select uid,aid into res_uid,res_aid from tb_user where username = in_username and password = in_password;
	IF coalesce( res_uid, 0 ) = 0 then
		SET res_out = -1;
		select res_out as result;
		LEAVE PROC_LABEL;
	END IF;

	-- 平台方判断: 根据 aid 查找 tb_access , 验证信息 status sshkey
	select status,sshkey into res_status,res_sshkey from tb_access where aid = res_aid;
	IF res_status <> 1 then
		SET res_out = -2;
		select res_out as result;
		LEAVE PROC_LABEL;
	END IF;

	-- 比较 Server sshkey
	IF in_asshkey <> res_sshkey then
		SET res_out = -3;
		select res_out as result;
		LEAVE PROC_LABEL;
	END IF;

	-- 用户方判断: 判断用户是否有权限参与这个游戏。
	select status into res_status from tb_usergame where aid = res_aid;
	IF coalesce( res_status, 0 ) = 0 then
		SET res_out = -4;
		select res_out as result;
		LEAVE PROC_LABEL;
	END IF;

	-- 根据 gameid 和 logintype 查询出 srv_id, IP , Port
	select srv_id,ip,port into res_srvid,res_ip,res_port from tb_allserver where gameid = in_gameid and logintype = in_logintype;
	IF coalesce( res_srvid, 0 ) = 0 then
		SET res_out = -5;
		select res_out as result;
		LEAVE PROC_LABEL;
	END IF;

	-- 更新 tb_prelogin 包括status = 1. 登录 lasttime = 最后时间, sshkey = MD5(随机数+lasttime+rid),srv_id,logintype;
	select count(*) into res_cnt from tb_prelogin where uid = res_uid;
	IF coalesce( res_cnt, 0 ) = 0 then
		insert into tb_prelogin(uid, status, lasttime, sshkey, srv_id, logintype ) values(res_uid, 1, now(), in_usshkey, res_srvid, in_logintype);
	ELSE
		update tb_prelogin SET status = 1, lasttime = now(), sshkey = in_usshkey, srv_id = res_srvid, logintype = in_logintype where uid = res_uid;
	END IF;

	select res_out as err, res_uid as userid, res_port as port, res_ip as ip;

	end
	//
delimiter ;

  

时间: 2024-11-01 15:46:52

MySql存储过程例子1的相关文章

mysql存储过程例子

/*定义变量方式1:set @变量名=值;方式2:select 值 into @变量名;方式3:declare 变量名 类型(字符串类型加范围) default 值; in参数 入参的值会仅在存储过程中起作用out参数 入参的值会被置为空,存储中计算的值会影响外面引用该变量的值inout参数 入参的值不会被置为空,存储中计算的值会影响外面引用该变量的值*/use mysql;/*创建1个存储过程*/delimiter $$DROP PROCEDURE IF EXISTS porc_person_

mysql 存储过程 例子

CREATE DEFINER=`root`@`%` PROCEDURE `sp_GetWangingsCount`(IN `PCode` VARCHAR(50), IN `FromDay` DATE, IN `Cycle` INT, IN `DayCount` INT, OUT `Rlt` INT, OUT `DayStr` VARCHAR(520)) LANGUAGE SQL NOT DETERMINISTIC CONTAINS SQL SQL SECURITY DEFINER COMMENT

MySQL存储过程详解 mysql 存储过程

MySQL存储过程详解  mysql 存储过程 (2010-12-13 10:59:38) 转载▼ 标签: it 分类: mysql mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保

MYSQL存储过程和函数学习笔记

学至Tarena金牌讲师何山,金色晨曦科技公司技术总监沙利穆课程笔记的综合. 1. 什么是存储过程和函数 将SQL语句放入一个集合里,然后直接调用存储过程和函数来执行已经定义好的SQL语句,通过存储过程和函数,可以避免开发人员重复编写相同的SQL语句. MYSQL存储过程和函数是保存在服务器中,在服务器中存储和执行,可以减少客户端和服务器端之间数据传输的消耗. 存储过程就是一组已经保存在数据库中的语句,并且可以随时地调用. 存储过程允许标准组件式编程,存储过程在被创建以后可以在程序中被多次调用而

MySQL存储过程详解 mysql 存储过程(转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html)

转:http://blog.sina.com.cn/s/blog_52d20fbf0100ofd5.html mysql存储过程详解 1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和

mysql存储过程、存储函数及流程控制

存储过程 一.基本语法 create procedure sp_name([proc_parameter[,...]]) [characteristic...]routine_body begin end sp_name 表示存储过程的名字 proc_parameter 存储过程参数例表[IN OUT INOUT]三个部分组成 其中IN 表示传进来的参数 其中OUT 表示传出去的参数 其中INOUT 表示传进来但最终传回的参数 routine_body 参数是SQL代码的内容(类似于触发器的fo

MySQL存储过程中的3种循环

在MySQL存储过程的语句中有三个标准的循环方式:WHILE循环,LOOP循环以及REPEAT循环.还有一种非标准的循环方式:GOTO,不过这种循环方式最好别用,很容易引起程序的混乱,在这里就不错具体介绍了. 这几个循环语句的格式如下: WHILE……DO……END WHILE REPEAT……UNTIL END REPEAT LOOP……END LOOP GOTO 下面首先使用第一种循环编写一个例子. mysql> create procedure pro10() -> begin ->

mysql存储过程详解

1.      存储过程简介   我们常用的操作数据库语言SQL语句在执行的时候需要要先编译,然后执行,而存储过程(Stored Procedure)是一组为了完成特定功能的SQL语句集,经编译后存储在数据库中,用户通过指定存储过程的名字并给定参数(如果该存储过程带有参数)来调用执行它. 一个存储过程是一个可编程的函数,它在数据库中创建并保存.它可以有SQL语句和一些特殊的控制结构组成.当希望在不同的应用程序或平台上执行相同的函数,或者封装特定功能时,存储过程是非常有用的.数据库中的存储过程可以

Mysql存储过程(Java)

这是我学习mysql存储过程时关心的几个点内容,希望能对你们学习存储过程有所帮助. 语法: create procedure sp_name ([proc_parameter[,...]]) [characteristic ...]begin.......end Proc_parameter:存储过程的参数列表,多个参数彼此间用逗号分隔      格式[IN|OUT|INOUT] param_name type IN(输入参数).OUT(输出参数).INOUT(输出参数和输入); Param_n