需求:
项目上线后发现一些sao操作后导致了存字典项编码的字段有少部分数据存的字典项名字,现需要写个升级SQL将存字典项名字的数据更正为存字典项编码。(字典项很多)
开始思路:
最开始想的处理思路是,写个自定义函数(因为要传入变量,不能使用子查询所以就用自定义函数了)根据字典项值查询出对应的字段项编码,然后在where中带条件筛选出需要更正的值。写好后发现通用性不强,换个字典项筛选条件不好处理。
-- 获取民族编码
DELIMITER $$
DROP FUNCTION IF EXISTS getNationCode$$
CREATE FUNCTION getNationCode(nation_code varchar(50)) RETURNS varchar(50)
BEGIN
DECLARE ret VARCHAR(50);
-- 把查到的code值放在ret中
SELECT `code` INTO ret FROM pl_dict_item WHERE dict_code = 'Nation' AND `name` = nation_code;
-- 若没查到值就返回原来的值
IF ret IS NULL THEN SET ret = nation_code;
END IF;
return ret;
END $$
-- SELECT 'aaa';
-- SELECT 语句原来后面直接跟一个值就可以,本质是输出内容的语句
-- SELECT getNationCode("族");
-- 更新字典项民族名字为编码
UPDATE b_user_de