注意:当报如下错误时,是因为存储过程中定义的变量值太小,加大它的范围即可。

Caused by: java.sql.SQLException: ORA-06502: PL/SQL: 数字或值错误 :  字符串缓冲区太小
ORA-06512: 在 "AP_JXMG.NUM2RMB", line 6

解决办法:如

sch    varchar2(20) := '零壹贰叄肆伍陆柒捌玖';
  sjin   varchar2(50) := '分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟';
  srmb   varchar2(100) := '';

改为

sch    varchar2(50) := '零壹贰叄肆伍陆柒捌玖';
  sjin   varchar2(100) := '分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟';
  srmb   varchar2(200) := '';

--Oracle存储过程实现人民币大小写转换
--使用方法
select num2rmb(3454645435345123.45) RMB from dual;

--创建存储过程
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(50) := '零壹贰叄肆伍陆柒捌玖';
  sjin   varchar2(100) := '分角圆拾佰仟万拾佰仟亿拾佰仟万拾佰仟';
  srmb   varchar2(200) := '';
  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 < 12 then --否则多个0处理
                   case
                     when s_num < 7 then
                      '' --一万以内。。。
                     when s_num < 11 then
                      case
                        when e_num < 8 and s_num < 10 then
                         '万'
                      end
                     when s_num < 15 then
                      case
                        when e_num < 12 then
                         '亿'
                      end
                     else
                      '万亿'
                   end
                  when e_num < 16 and s_num > 14 then
                   '万'
                end || case
                  when s_num > 3 and e_num < 3 then
                   '圆零'
                  when e_num = 3 then
                   '圆'
                  when e_num not in (7, 11, 15) or s_num - e_num > 2 then
                   '零'
                end;
        srmb := srmb || substr(sch, num + 1, 1) ||
                substr(sjin, len - i + 1, 1);
      end if;
      s_num := 0;
      e_num := 0;
    else
      if s_num = 0 then
        --当s_num=0时0串起始
        s_num := len - i + 1; --记录开始
        e_num := s_num;
      else
        e_num := len - i + 1;
      end if;
    end if;
  end loop;
  if s_num <> 0 then
    --此时以0结尾
    srmb := srmb || case
              when s_num = len then
               '零圆整' --全0串,加。。。
              when s_num = 1 or s_num = 2 then
               '整' --分(1),角(2)后加。。。
              when s_num < 7 or s_num = 10 then
               '圆整'
              when s_num < 11 then
               '万圆整'
              when s_num < 15 then
               '亿圆整'
              else
               '万亿圆整'
            end;
  else
    srmb := srmb || '整'; --不以0结尾,加...
  end if;
  if je < 0 then
    srmb := '负' || srmb;
  end if;
  return srmb;
end num2rmb;

Oracle存储过程实现人民币大小写转换相关推荐

  1. JavaScript实现人民币大小写转换

    当使用支票或者签署合同时,需要用到大写人民币,常用的中文大写包括零.壹.贰.叁.肆.伍.陆.柒.捌.玖.拾.佰.仟.万.亿.本文介绍下如何使用JavaScript实现将阿拉伯数字的人民币转换成大写. ...

  2. 人民币大小写转换格式

    <?php //****人民币大小写转换格式**** function ChangeToRMB($Val) { $str=array(); $str[0]="零"; $str ...

  3. 超强技巧分享,如何将人民币大小写转换?

    当我们在制作财务表格的时候,需要将金额的大写跟小写进行转换,如果要一个一个手打出来的话,那就太浪费时间了,一两个数额还好,如果一整个表格的数额,那就不得了了,那要花费多少时间才能将小写金额转换成大写金 ...

  4. Java实现人民币大小写转换

    思路和具体方法都在注释中说明 package ClassicArithmetic;import java.util.Scanner;/** @author:LOHAS翀* @time:2019/11/ ...

  5. JAVAScript实现人民币大小写转换算法

    大家好,我是梦辛工作室的灵,最近在写一个人民币大小写转换的工具,就把数字转换为大写中文 界面如下: 这样就很清楚了,做财务软件的时候应该会经常用到: 转换代码如下(是从右向左读): function ...

  6. c语言人民币大小写转换,人民币大小写转换函数.xls

    人民币大小写转换函数.xls Sheet3 Sheet1 IF(A1=0,"",IF(ABS(A1)<0.995,"",TEXT(INT(ROUND(AB ...

  7. java人民币大小写转换_人民币大小写转换

    usingSystem;usingSystem.Text;usingSystem.Text.R using System; using System.Text; using System.Text.R ...

  8. Oracle字符串截取和大小写转换

    1.截取长度  substr(字符串,截取开始位置,截取长度) //返回截取的字  例如:update tableA set colA=substr(colA,instr(colA,'$')+1) w ...

  9. JS进行人民币大小写转换

    //数字金额大写转换(可以处理整数,小数,负数) function upDigit() { digit=$("#digit").html(); n=digit.replace(/\ ...

最新文章

  1. Oracle学习笔记十三 触发器
  2. petshop4.0 详解之一(系统架构设计)
  3. html无框架,HTML框架技术详例
  4. linux如何查看nohup日志大小,linux下nohup日志输出过大问题解决方案
  5. 设计模式之——策略(Strategy)模式
  6. 测试电脑cpu性能软件,怎么使用软件来测试CPU性能
  7. standard-version(发版与 Changelog 自动化)
  8. 内网渗透-WindowsLinux痕迹清除
  9. 下载FATSQ,读取10条序列并计算每条序列的长度和GC含量
  10. linux每日命令,Linux日常命令整理
  11. mysql5.7改登录密码_MYSQL 5.7 修改密码、登录问题
  12. 全路段感知、云控平台……京台高速到底有多智慧?
  13. python123怎么注销账号_怎么才能注销账号?
  14. rgb颜色设置方法及常用颜色的RGB值
  15. AutoML系列 | 02-自动化机器学习系统设计
  16. 使用 Cocos2d-x 和粒子编辑器实现“天天爱消除”场景特效
  17. 2022,SCI一区(Advances in Engineering Software),Semantic Cluster Operator for SR and Its Applications
  18. 使用python修改excel电子表格
  19. 使用modelsim设计4位全加器,并调出波形图和电路图(详细教程)
  20. 电商做软文营销的六招

热门文章

  1. wpf 在Popup内的TextBox 输入法 不能切换输入法
  2. c:out escapeXml
  3. Android Studio Database Inspetor 无法正常显示数据库
  4. 息屏通知 android,息屏提醒app免费版
  5. VMware虚拟机 安装 macOS High Sierra 10.13
  6. 如何在工作中如鱼得水?有三点很重要。。。
  7. 如何在idea中创建一个SpringBoot项目(超详细教学)
  8. #51CTO学院四周年#我在51cto学院中成长的故事
  9. MusicPlay 音乐播放器(纯前端)
  10. Curl cookie设置