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  -   1 1 );
         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;
  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值