语法细节不多说,网上有很多文章,而且概念很多。直接上一段代码:
#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;