Oracle数字金额转为汉字展示 [数据库教程]

database

CREATE OR REPLACE FUNCTION "F_UPPER_MONEY_NEW"(I_NUM in number default null )

return nvarchar2 is

/*

处理数字金额转换为汉字表达

--情况1.保留元角分 (默认) 10240035001421.1 //壹拾万贰仟肆佰亿参仟伍佰万壹仟肆佰贰拾壹元壹角零分

--情况2.情况1上调整角分没有则不保留

--情况3.单位全保留 (包含substr中所有)

样例1 130034000600.04 壹仟参佰亿参仟肆佰万陆佰元零角肆分

*/

Result varchar2(100); --返回字符串

V_TEMNUM varchar2(100); --四舍五入到小数点后2位并去除小数点

v_str1s varchar2(36) := ‘零壹贰参肆伍陆柒捌玖‘; --数字汉字表示

v_str2s varchar2(50) := ‘分角元拾佰仟万拾佰仟亿拾佰仟万拾佰仟‘; --数字单位

V_STR_N VARCHAR2(3):=‘‘;

v_num number := 1; --计数

v_len number; --长度

v_str1 varchar2(3); --中文单数字字符

v_str2 varchar2(3); --单位

v_numround varchar2(3); --

v_errmsg varchar2(200); --错误消息

begin

-- 为空返回空值

if I_NUM is null then

return null;

end if;

--格式化输入参数

IF I_NUM<0 THEN

V_STR_N:=‘负‘;

END IF;

V_TEMNUM := round(I_NUM, 2) * 100;

v_len := length(V_TEMNUM);

while 0 < v_len loop

v_numround := substr(V_TEMNUM, v_len, 1);

v_str1 := substr(v_str1s, v_numround + 1, 1);

v_str2 := substr(v_str2s, v_num, 1);

--处理特殊情况 (情况3不需要处理特殊情况)

IF v_str1 = ‘零‘ AND v_num >= 3 THEN --v_num>=3 去除支持情况2

IF V_STR2 IN (‘仟‘, ‘佰‘, ‘拾‘) THEN

IF SUBSTR(Result,1,1) IN (‘零‘,‘元‘,‘万‘,‘亿‘) THEN

v_str1 := ‘‘;

v_str2 := ‘‘;

ELSE

v_str1 := ‘零‘;

v_str2 := ‘‘;

END IF;

ELSIF V_STR2 IN (‘亿‘, ‘万‘, ‘元‘) THEN

V_STR1 := ‘‘;

END IF;

END IF;

Result := v_str1 || v_str2 || Result;

v_len := v_len - 1;

v_num := v_num + 1;

end loop;

return V_STR_N||Result;

exception

when others then

--实际应用返回根据情况调整

v_errmsg:=substr(sqlerrm,1,200);

--return ‘‘;

raise_application_error(1000,v_errmsg);

end F_UPPER_MONEY_NEW;

Oracle数字金额转为汉字展示

以上是 Oracle数字金额转为汉字展示 [数据库教程] 的全部内容, 来源链接: utcz.com/z/535289.html

回到顶部