/*
数字转大写
20081218 CLINTON
*/
CREATE OR REPLACE FUNCTION F_NUM_UPPER (sz number)
return varchar2 is
szdx varchar2(100);
lszf varchar2(100);
zf varchar2(100);
qsz varchar2(1);
i number;
j number;
z number;
bj number;
zz varchar2(30);
begin
szdx:='';
lszf:='';
bj:=0;
zz:='';
-------------
z:=trunc(sz/100000000);
if z<>0 then
bj:=1;
i:=length(trim(to_char(trunc(z))));
j:=1;
qsz:='';
loop
if qsz='0' and substr(trim(to_char(trunc(z))),j,1)='0' then
zf:='';
else
if (i=1 and substr(trim(to_char(trunc(z))),j,1)='0') then
zf:='';
else
zf:=substr('零壹贰叁肆伍陆柒捌玖',to_number(substr(trim(to_char(trunc(z))),j,1))+1,1);
end if;
end if;
lszf:=zf;
if substr(trim(to_char(sz)),j,1)<>'0' then
lszf:=zf||trim(substr(' 拾 佰 仟',i*2-1,2));
end if;
qsz:=substr(trim(to_char(trunc(z))),j,1);
szdx:=szdx||lszf;
i:=i-1;
j:=j+1;
exit when j>length(trim(to_char(trunc(z))));
end loop;
if substr(trim(szdx),length(trim(szdx)),1)='零' then
szdx:=substr(trim(szdx),1,length(trim(szdx))-1);
end if;
szdx:=szdx||'亿';
end if;
-------------
-------------
z:=trunc((sz-trunc(sz/100000000)*100000000)/10000);
if bj=1 then
zz:=lpad(trim(to_char(trunc(z))),4,'0');
else
zz:=trim(to_char(trunc(z)));
end if;
if z<>0 or bj=1 then
bj:=1;
i:=length(zz);
j:=1;
qsz:='';
loop
if qsz='0' and substr(zz,j,1)='0' then
zf:='';
else
if (i=1 and substr(zz,j,1)='0') then
zf:='';
else
zf:=substr('零壹贰叁肆伍陆柒捌玖',to_number(substr(zz,j,1))+1,1);
end if;
end if;
lszf:=zf;
if substr(zz,j,1)<>'0' then
lszf:=zf||trim(substr(' 拾 佰 仟',i*2-1,2));
end if;
qsz:=substr(zz,j,1);
szdx:=szdx||lszf;
i:=i-1;
j:=j+1;
exit when j>length(zz);
end loop;
if substr(trim(szdx),length(trim(szdx)),1)='零' then
szdx:=substr(trim(szdx),1,length(trim(szdx))-1);
end if;
szdx:=szdx||'万';
if substr(trim(szdx),length(trim(szdx))-1,1)='亿' then
szdx:=substr(trim(szdx),1,length(trim(szdx))-2)||'亿零';
end if;
end if;
-------------
-------------
z:=sz-trunc(sz/10000)*10000;
if bj=1 then
zz:=lpad(trim(to_char(trunc(z))),4,'0');
else
zz:=trim(to_char(trunc(z)));
end if;
if z<>0 or bj=1 then
i:=length(zz);
j:=1;
qsz:='';
loop
if qsz='0' and substr(zz,j,1)='0' then
zf:='';
else
if (i=1 and substr(zz,j,1)='0') then
zf:='';
else
zf:=substr('零壹贰叁肆伍陆柒捌玖',to_number(substr(zz,j,1))+1,1);
end if;
end if;
lszf:=zf;
if substr(zz,j,1)<>'0' then
lszf:=zf||trim(substr(' 拾 佰 仟',i*2-1,2));
end if;
qsz:=substr(zz,j,1);
szdx:=szdx||lszf;
i:=i-1;
j:=j+1;
exit when j>length(zz);
end loop;
end if;
-------------
if substr(trim(szdx),length(trim(szdx))-1,2)='零零' then
szdx:=substr(trim(szdx),1,length(trim(szdx))-2);
end if;
if substr(trim(szdx),length(trim(szdx)),1)='零' then
szdx:=substr(trim(szdx),1,length(trim(szdx))-1);
end if;
return szdx;
end;