ORACLE简繁转换函数

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/qq_23318779/article/details/64921423

oracle的convert函数也可以实现简繁转换,但是经测试存在一些问题,有些字转不了,比如‘宣佈’,所以自己写了一个简单的,可以实现字字对应的简繁转换。(convert函数能够实现部分的简繁转换已经很牛逼了!)


代码尾部附带一大一小两个字库,小的600多,大的3000多,请各位根据需求和执行效率自行选择,也可以在小库的基础上一步一步增加自己需要的字体。

CREATE OR REPLACE FUNCTION FN_SC_TC(OLD_STRING in VARCHAR2,FUN_TYPE in NUMBER := 1)
--OLD_STRING为要转的字符串,FUN_TYPE为转换方式,1为繁转简,2为简转繁,默认繁转简
RETURN VARCHAR2 AS
  --简体字库,必须与繁体字库一一对应,详细的字库见末尾
  V_SC_LIST constant LONG := '爱碍袄肮罢坝';
  --繁体字库,必须与简体字库一一对应,详细的字库见末尾
  V_TC_LIST constant LONG := '愛礙襖骯罷壩';
  
  V_NEW_STRING varchar2(2000);--将要返回的新字符串
  V_LENGTH NUMBER(12) := length(OLD_STRING);--字符串总长度
  V_INDEX  Number(12) := 1;--字符串的游标
  V_TEMP Number(12) := 0;--繁体中文对应简体中文在LIST中的位置
  V_FROM LONG := V_TC_LIST;--不知道这样搞一下,constant还有没有优化的效果了
  V_TO LONG := V_SC_LIST;
  
BEGIN
  IF FUN_TYPE = 2 THEN --简体转繁体
    V_FROM := V_SC_LIST;
    V_TO := V_TC_LIST;
  END IF;
  
  LOOP
    IF V_INDEX <= V_LENGTH THEN--遍历整个字符串
      V_TEMP := INSTR(V_FROM,substr(OLD_STRING,V_INDEX,1));--查找某个字符是否是繁体字
      IF V_TEMP <> 0 THEN--若是繁体字
        --使用简体字库对应的简体字替换该繁体字
        V_NEW_STRING := V_NEW_STRING || substr(V_TO,V_TEMP,1);
        V_TEMP := 0;
      ELSE
        V_NEW_STRING := V_NEW_STRING || substr(OLD_STRING,V_INDEX,1);
      END IF;     
      V_INDEX := V_INDEX + 1;
    ELSE
      EXIT;
    END IF;
  END LOOP;
  return V_NEW_STRING;
  END FN_SC_TC;


大字库必需要将每行分开,不然在执行的时候可能会报ORA-06502的错误,并且因其长度超过了PL\SQL编辑框的限制,显示的时候会有文字解码错误的BUG。

相关错误描述请见:ORA-06502: PL/SQL: 数字或值错误 : 字符串缓冲区太小 错误分析

若各位有相关的建议或想法,欢迎讨论

猜你喜欢

转载自blog.csdn.net/qq_23318779/article/details/64921423
今日推荐