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