mysql中的function定义以及使用游标循环赋值。 下面代码主要功能:
–通过用户id,获取其关联的角色id,循环获取角色名称
CREATE DEFINER=`root`@`localhost` FUNCTION `f_op_get_role_names`(pi_userid int -- 传入的参数
) RETURNS varchar(32) CHARSET utf8 -- 返回的参数类型
BEGINdeclare a varchar(32);declare v_role_id varchar(32);declare v_role_name varchar(32);declare s int default 0;declare po_rtn varchar(300) ;declare role cursor for select role_id from op_sys_user_role WHERE user_id &#61; pi_userid;-- 定义游标&#xff0c;也可以是一个对象&#xff0c;然后将对象值复制给对象名role。属于一个游标。DECLARE CONTINUE HANDLER FOR SQLSTATE &#39;02000&#39; SET s&#61;1; -- 循环标志&#xff0c;复制就可以了open role ;fetch role into v_role_id ;while a<>1 do -- 当a不等于1的时候执行内容操作set v_role_name &#61; &#39;&#39;;-- 通过id获取角色名称SELECT role_nameINTO v_role_name FROMop_sys_roleWHERE1 &#61; 1 AND id &#61; v_role_id;-- 无数据时IF v_role_name IS NULL OR v_role_name &#61; &#39;&#39; THENreturn NULL;ELSE-- 拼接返回值IF po_rtn &#61; &#39;&#39; THENset po_rtn &#61; v_role_name;ELSEset po_rtn &#61; po_rtn || &#39;&#xff1b;&#39; ||v_role_name;END IF;END IF;fetch role into v_role_id ,v_role_name ; -- //再在循环中将游标中的值传入到变量中end while ; close role;RETURN po_rtn;END
参考博客&#xff1a;https://blog.csdn.net/caoliu1024cl/article/details/77742156