要求:不考虑原来字段的值,只考虑数据长度,通过脚本update tabA set colA = stringMask(colA )实现数据脱敏,例如张三丰--ASD
提问:将指定列名作为mysql自定义函数的参数,可否获取该指定列的数据???还是说这种情况通过存储过程实现更好???
背景知识:
自定义函数(user-defined function UDF)与存储过程的区别
1,函数方法的参数列表只允许IN类型的参数,并且不允许指定IN关键字
2,函数方法返回一个单一的值,值的类型在存储方法的头部定义
3,函数方法可以在SQL语句内部调用
4,函数方法不能返回结果集
UDF可以没有参数,但UDF必须有且只有一个返回值
下面是mysql自定义函数,实现的是对传进去的某个字符串进行数据脱敏
CREATE DEFINER=root@localhost FUNCTION myMask(v_str VARCHAR(800)) RETURNS varchar(800) CHARSET utf8
BEGIN
DECLARE str VARCHAR(800) DEFAULT '';
DECLARE strlen VARCHAR(800) DEFAULT '';
DECLARE chars_str varchar(100) DEFAULT 'abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789';
DECLARE return_str varchar(800) DEFAULT '';
DECLARE i INT DEFAULT 0;
SET str = v_str;
set strlen = CHAR_LENGTH(str);
WHILE i< CONVERT(strlen,SIGNED) DO
SET return_str = concat(return_str,substring(chars_str , FLOOR(1 + RAND()*62 ),1));
SET i = i +1;
END WHILE;
RETURN return_str;
END
希望通过优化,实现上述要求。