oracle 数字转换成大写

本文介绍了一个Oracle存储过程,用于将数字转换为中文大写形式。该过程能够处理带有小数点的数字,并将其转换为符合中文财务书写规范的大写格式。

自己写的存储过程,先在此备份下。

  -- Author  : DSJ
  -- Created : 2008-2-27 10:22:51
  -- Purpose : 数字转换成大写(205.23 --> 二百零五点二三 )
create or replace procedure sp_digit2speech
  (
  digit 
in float,
  speech out 
varchar2  
  ) 
is
begin
   
declare 
     left_Str  
varchar2(100);   ---左边字符串
     right_Str varchar2(100);   ---右边字符串
     unit_str varchar2(100);    ---位
     number_str varchar2(100);
     vT 
varchar2(1000);          
     vN 
Number;
     left_length 
number;         ---左边字符长度
     i number;
     n 
number;
     m 
number;
     t 
number;
     new_digit 
number;
     
--12988744.00
     --
   begin  
     left_Str :
= '';
     right_Str :
= '';
     unit_str :
= '十百千万十百千亿十百千';
     number_str :
= '一二三四五六七八九';
     m :
= 0;
     new_digit :
= round(digit, 2);
     
     i :
= 1;
     vT :
= '';
     
     
if instr(to_char(new_digit), '.'> 0 then
       left_Str :
= substr(to_char(new_digit), 1, instr(to_char(new_digit), '.'- 1);
       right_str :
= substr(to_char(new_digit), instr(to_char(new_digit), '.'+ 1, length(to_char(new_digit))- instr(to_char(new_digit), '.'));
     
else
       left_Str :
= to_Char(new_digit)  ;
       right_str :
= '';
     
end if;
     
     left_length :
= length(left_Str);
     n :
= left_length;
     
while i < left_length loop
       vN :
= to_number(substr(left_str, i, 1));
       
if vN > 0 then
         vT :
= vT || substr(number_str, vN, 1|| substr(unit_str, n - 11);
         m :
= 1;
         t :
= 0;
       
else  -- begin 零
         begin
            
if m > 0 then
               vT :
= vT || '';
             
else
               
begin
                 
if  n < 5 and t > 1 then
                   vT :
= substr(vT, 1, length(vT) - 1);
                  
-- vT := vT;
                 end if;  
               
end
               t :
= t +1
             
end if;  
           
if n = 5 then
             vT :
= substr(vT, 1, length(vT) - 1);
             vT :
= vT || '';
           
end if;
           m:
=0;
         
end
       
end if;--end 零
     --  dbms_output.put_line(to_char(n) || ', ' || substr(left_str, 1, i) || '  =  ' || vT);         
       i := i + 1;
       n :
= n -1
     
end loop;  
    
      vN :
= to_number(substr(left_str, left_length, 1));
      
if vN > 0 then 
        vT :
= vT || substr(Number_str, vN, 1);
      
end if;
     
     
if length(right_str) > 0 then
       vT :
= vT || '';
       i :
= 1;
       
while i<= length(right_str) loop
            vN :
= to_number(substr(right_str, i, 1));
            vT :
= vT || substr(number_str, vN, 1) ;
            i :
= i + 1;
       
end loop;
     
end if;
--  speech := 'number = ' || to_char(digit) || '  vt=' || vt;
     speech :=  vt;
   
end;
end sp_digit2speech;
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值