sponsored links

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;