`

MySql存储过程写法

阅读更多

语法细节不多说,网上有很多文章,而且概念很多。直接上一段代码:

#mysql存储过程的单行注释用“#”,如果使用“--”则必须在后面使用至少一个空格,否则存储过程编译不通过
create procedure addWebGameAdmin(in gameId int)
begin
	declare gameTitle varchar(100) character set utf8; -- 存储过程变量的字符集声明,否则中文出现乱码
	declare adminId varchar(50);  -- 管理员id
	declare adminAmount varchar(100); -- 管理员账号:游戏名称+admin
	declare adminPwd varchar(50); -- 管理员密码:md5(账号+密码)
	declare roleId varchar(50); -- 权限id
	
	declare curVar varchar(50) default ''; -- 当前游标指向的结果
	declare stop int default 0;-- 处理游标到达最后一行的情况
	declare resultSet cursor for select node_id from gaga_lianyun_manage_node; -- 创建游标
	declare continue handler for sqlstate '02000' set stop=1; -- 声明游标的异常处理,设置一个终止标记
	
	select title into gameTitle from php_ecms_webgame where id=gameId;
	if gameTitle is not null then
		set adminId=replace(uuid(),'-','');  -- (这里使用了replace函数和uuid函数,)管理员id
		
		set adminAmount=concat(gameTitle,'admin');   -- (字符串连接函数concat)管理员账号
		set adminPwd=md5(concat(adminAmount,'123')); -- 管理员密码
		insert into gaga_lianyun_admin (admin_id,amount,pwd,game_id) values (adminId,adminAmount,adminPwd,gameId); -- 插入记录
		open resultSet;
			
			fetch resultSet into curVar;
			-- 判断游标是否已经到达最后
			while stop <> 1 do
				select replace(uuid(),'-','') into roleId;   -- 权限id
				insert into gaga_lianyun_manage_node (role_id,admin_id,manage_node_id) values (roleId,adminId,curVar);
				fetch resultSet into curVar; -- 读取下一行数据
			end while;
		close resultSet;
		commit;
	end if;
	
end;

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics