create
or
replace
function
l2u
--
小写金额转换成大写
(n_lowermoney in number ) return varchar2 as
v_lowerstr varchar2 ( 200 ); -- 小写金额
v_upperpart varchar2 ( 200 );
v_upperstr varchar2 ( 200 ); -- 大写金额
begin
v_lowerstr : = ltrim ( rtrim (to_char( round (n_lowermoney, 2 ),
' 9999999999999.99 ' )));
if substr(v_lowerstr, 1 , 1 ) = ' # ' then
return ' 转换金额超过计算范围(计算范围为:计算范围为: 0 - 9,999,999,999,999.99) ' ;
end if ;
for i in 1 .. length(v_lowerstr)
loop
select decode(substr(v_lowerstr, length(v_lowerstr) - i + 1 , 1 ),
' . ' ,
' 元 ' ,
' 0 ' ,
' 零 ' ,
' 1 ' ,
' 壹 ' ,
' 2 ' ,
' 贰 ' ,
' 3 ' ,
' 叁 ' ,
' 4 ' ,
' 肆 ' ,
' 5 ' ,
' 伍 ' ,
' 6 ' ,
' 陆 ' ,
' 7 ' ,
' 柒 ' ,
' 8 ' ,
' 捌 ' ,
' 9 ' ,
' 玖 ' ) || decode(i,
1 ,
' 分 ' ,
2 ,
' 角 ' ,
3 ,
null ,
4 ,
null ,
5 ,
' 拾 ' ,
6 ,
' 佰 ' ,
7 ,
' 仟 ' ,
8 ,
' 万 ' ,
9 ,
' 拾 ' ,
10 ,
' 佰 ' ,
11 ,
' 仟 ' ,
12 ,
' 亿 ' ,
13 ,
' 拾 ' ,
14 ,
' 佰 ' ,
15 ,
' 仟 ' ,
16 ,
' 万 ' ,
null )
into v_upperpart
from dual;
v_upperstr : = v_upperpart || v_upperstr;
end loop;
v_upperstr : = replace (v_upperstr, ' 零拾 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零佰 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零仟 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零零零 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零零 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零角零分 ' , ' 整 ' );
v_upperstr : = replace (v_upperstr, ' 零分 ' , ' 整 ' );
v_upperstr : = replace (v_upperstr, ' 零角 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零亿零万零元 ' , ' 亿元 ' );
v_upperstr : = replace (v_upperstr, ' 亿零万零元 ' , ' 亿元 ' );
v_upperstr : = replace (v_upperstr, ' 零亿零万 ' , ' 亿 ' );
v_upperstr : = replace (v_upperstr, ' 零万零元 ' , ' 万元 ' );
v_upperstr : = replace (v_upperstr, ' 万零元 ' , ' 万元 ' );
v_upperstr : = replace (v_upperstr, ' 零亿 ' , ' 亿 ' );
v_upperstr : = replace (v_upperstr, ' 零万 ' , ' 万 ' );
v_upperstr : = replace (v_upperstr, ' 零元 ' , ' 元 ' );
v_upperstr : = replace (v_upperstr, ' 零零 ' , ' 零 ' );
-- 对壹元以下的金额的处理
v_upperstr : = ltrim ( ltrim ( ltrim ( ltrim (v_upperstr, ' 元 ' ), ' 零 ' ), ' 角 ' ),
' 分 ' );
if substr(v_upperstr, 1 , 1 ) = ' 整 ' then
v_upperstr : = ' 零元整 ' ;
end if ;
return v_upperstr;
exception
when others then
return ' 发生错误: ' || sqlcode || ' -- ' || sqlerrm;
end l2u;
(n_lowermoney in number ) return varchar2 as
v_lowerstr varchar2 ( 200 ); -- 小写金额
v_upperpart varchar2 ( 200 );
v_upperstr varchar2 ( 200 ); -- 大写金额
begin
v_lowerstr : = ltrim ( rtrim (to_char( round (n_lowermoney, 2 ),
' 9999999999999.99 ' )));
if substr(v_lowerstr, 1 , 1 ) = ' # ' then
return ' 转换金额超过计算范围(计算范围为:计算范围为: 0 - 9,999,999,999,999.99) ' ;
end if ;
for i in 1 .. length(v_lowerstr)
loop
select decode(substr(v_lowerstr, length(v_lowerstr) - i + 1 , 1 ),
' . ' ,
' 元 ' ,
' 0 ' ,
' 零 ' ,
' 1 ' ,
' 壹 ' ,
' 2 ' ,
' 贰 ' ,
' 3 ' ,
' 叁 ' ,
' 4 ' ,
' 肆 ' ,
' 5 ' ,
' 伍 ' ,
' 6 ' ,
' 陆 ' ,
' 7 ' ,
' 柒 ' ,
' 8 ' ,
' 捌 ' ,
' 9 ' ,
' 玖 ' ) || decode(i,
1 ,
' 分 ' ,
2 ,
' 角 ' ,
3 ,
null ,
4 ,
null ,
5 ,
' 拾 ' ,
6 ,
' 佰 ' ,
7 ,
' 仟 ' ,
8 ,
' 万 ' ,
9 ,
' 拾 ' ,
10 ,
' 佰 ' ,
11 ,
' 仟 ' ,
12 ,
' 亿 ' ,
13 ,
' 拾 ' ,
14 ,
' 佰 ' ,
15 ,
' 仟 ' ,
16 ,
' 万 ' ,
null )
into v_upperpart
from dual;
v_upperstr : = v_upperpart || v_upperstr;
end loop;
v_upperstr : = replace (v_upperstr, ' 零拾 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零佰 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零仟 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零零零 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零零 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零角零分 ' , ' 整 ' );
v_upperstr : = replace (v_upperstr, ' 零分 ' , ' 整 ' );
v_upperstr : = replace (v_upperstr, ' 零角 ' , ' 零 ' );
v_upperstr : = replace (v_upperstr, ' 零亿零万零元 ' , ' 亿元 ' );
v_upperstr : = replace (v_upperstr, ' 亿零万零元 ' , ' 亿元 ' );
v_upperstr : = replace (v_upperstr, ' 零亿零万 ' , ' 亿 ' );
v_upperstr : = replace (v_upperstr, ' 零万零元 ' , ' 万元 ' );
v_upperstr : = replace (v_upperstr, ' 万零元 ' , ' 万元 ' );
v_upperstr : = replace (v_upperstr, ' 零亿 ' , ' 亿 ' );
v_upperstr : = replace (v_upperstr, ' 零万 ' , ' 万 ' );
v_upperstr : = replace (v_upperstr, ' 零元 ' , ' 元 ' );
v_upperstr : = replace (v_upperstr, ' 零零 ' , ' 零 ' );
-- 对壹元以下的金额的处理
v_upperstr : = ltrim ( ltrim ( ltrim ( ltrim (v_upperstr, ' 元 ' ), ' 零 ' ), ' 角 ' ),
' 分 ' );
if substr(v_upperstr, 1 , 1 ) = ' 整 ' then
v_upperstr : = ' 零元整 ' ;
end if ;
return v_upperstr;
exception
when others then
return ' 发生错误: ' || sqlcode || ' -- ' || sqlerrm;
end l2u;