原代码为网上转载而来,后经本人修改而成,主要适用于票据已印刷好"万仟佰拾元"单位的情况,如侵犯他人著作权,请通知本人删除,谢谢
CREATE OR REPLACE FUNCTION money_trans( s_money NUMBER ) RETURN VARCHAR2
IS
c_money varchar2(12);
n_string varchar2(20) := '壹贰叁肆伍陆柒捌玖';
b_string varchar2(80);
n char;
len number(3);
i number(3);
tmp number(12);
is_zero BOOLEAN;
z_count number(3);
BEGIN
tmp := ROUND(s_money) ;
c_money := RTRIM(LTRIM(TO_CHAR(tmp, '999999999999')));
len := LENGTH(c_money);
IF len > 5 THEN
RETURN '超出范围';
END IF;
is_zero := TRUE;
z_count := 0;
i := 0;
WHILE i < len LOOP
i := i + 1;
n := substr(c_money,i,1);
IF n = '0' THEN
IF len-i=4 OR len-i=3 OR len-i=2 OR len-i=1 OR len=i THEN
IF is_zero THEN
b_string := SUBSTR(b_string,1,LENGTH(b_string)-1);
is_zero := FALSE;
END IF;
IF len-i=4 THEN
b_string := b_string || '零';
END IF;
IF len-i=3 THEN
b_string := b_string || '零';--圆
END IF;
IF len-i=2 THEN
b_string := b_string || '零';--圆
END IF;
IF len-i=1 THEN
b_string := b_string || '零';--圆
END IF;
IF len = i THEN
b_string := b_string || '零';--整
END IF;
z_count := 0;
ELSE
IF z_count = 0 THEN
b_string := b_string || '零';
is_zero := TRUE;
END IF;
z_count := z_count + 1;
END IF;
ELSE
b_string := b_string || substr(n_string,TO_NUMBER(n),1);
z_count := 0;
is_zero := FALSE;
END IF;
END LOOP;
RETURN SUBSTR(b_string,1,15);
END money_trans;