日期:2014-05-17  浏览次数:20973 次

Oracle存储过程实现人民币大小写转换

create or replace function num2rmb(je number) return varchar2 is
  result varchar2(100);
  i      pls_integer;
  snum   varchar2(20) := ltrim(replace(to_char(abs(je),
                                               '9999999999999990.99'),
                                       '.'));
  len    pls_integer := length(snum);
  sch    varchar2(20) := '零壹贰叄肆伍陆柒捌玖';
  sjin   varchar2(50) := '分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟';
  srmb   varchar2(100) := '';
  num    Pls_Integer;
  jin    varchar(2);
  s_num  pls_integer := 0; --0起始位置
  e_num  pls_integer := 0; --0结束位置
begin
  for i in 1 .. len loop
    num := to_number(substr(snum, i, 1));
    if num <> 0 then
      --非‘0’时处理
      if s_num = 0 then
        srmb := srmb || substr(sch, num + 1, 1) ||
                substr(sjin, len - i + 1, 1);
        --前面字符非0时,正常连接。。。
      else
        srmb := srmb || --否则
                case
                  when s_num = e_num then --前面只有一个0
                   case s_num
                     when 7 then
                      '万' --只处理进位
                     when 11 then
                      '亿'
                     when 15 then
                      '万'
                   end
                  when e_num <