oracle 字典转换(code→name),带其他字符的,例:01,02,03或01/02/03转为啊啊,拜拜,瞅瞅

create or replace function dic_conver(dic_code in varchar2,
                                      dic_type in varchar2,
                                      str_type in varchar2)
/*
  dic_code:要转换的字符串,例:02,03,04
  dic_type:字典类型,注意:传入的字符串一定要和函数里定义的一致,包括大小写
           如果还有,可以自己增加
  另外,如果字典值比较多,可以再增加一个table字典,关联表查询
  str_type:分隔符类型,注意:除特殊字符外,比如‘,||等
  */
 return varchar2 is
  dic_name varchar2(500);

begin
  with temp as
   (SELECT TRIM(substr(txt,
                       instr(txt, str_type, 1, LEVEL) + 1,
                       instr(txt, str_type, 1, LEVEL + 1) -
                       instr(txt, str_type, 1, LEVEL) - 1)) AS txt_code
      FROM (SELECT str_type || dic_code || str_type txt FROM dual)
    CONNECT BY LEVEL <=
               length(dic_code) - length(REPLACE(dic_code, str_type, '')) + 1)
  
  select listagg(case
                   when dic_type = 'DISABLE_TYPE' then --字典类型是残疾类别
                    decode(a.txt_code, 'aa', '啊啊', 'bb', '报表', 'cc', '存储')
                   when dic_type = 'DISABLE_GRADE' then --字典类型是残疾等级
                    decode(a.txt_code, 'nn', '那你')
                 end,
                 str_type) within GROUP(ORDER BY a.txt_code)
    into dic_name
    from temp a;

  return dic_name;
end;

调用示例
在这里插入图片描述

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值