SMALLMONEY VARCHAR2
)
RETURN VARCHAR2 IS
BIGWRITE VARCHAR2(54); -- 用于负担会答谢的钱数
BIGNUMVARCHAR(2);-- 用于存放每一个阿拉伯数字对应的汉子
RMBVARCHAR(2);-- 用于存放人民币单位
MONEYPLACENUMBER;-- 用于确定人民币的精度,最多只能精确到分
DOTPLACENUMBER;-- 确定小数点的位置

MONEYNUMNUMBER;-- 人民币的位置
MYEXCEPTION EXCEPTION; -- 自定义异常
BEGIN
DOTPLACE :=INSTR(SMALLMONEY,'.');
IF(LENGTH(SMALLMONEY) > 14)OR ((LENGTH(SMALLMONEY) > 12) AND (DOTPLACE = 0)) THEN
RAISE MYEXCEPTION;
END IF;
IF DOTPLACE = 0 THEN
MONEYPLACE := 0;
ELSE
MONEYPLACE := DOTPLACE - LENGTH(SMALLMONEY);
END IF;
FOR MONEYNUM IN REVERSE1..LENGTH(SMALLMONEY) LOOP
IF MONEYNUM <> DOTPLACE THEN
CASE SUBSTR(SMALLMONEY,MONEYNUM,1)
WHEN '1' THEN BIGNUM := '壹';
WHEN '2' THEN BIGNUM := '贰';
WHEN '3' THEN BIGNUM := '叁';
WHEN '4' THEN BIGNUM := '肆';
WHEN '5' THEN BIGNUM := '伍';
WHEN '6' THEN BIGNUM := '陆';
WHEN '7' THEN BIGNUM := '柒';
WHEN '8' THEN BIGNUM := '捌';
WHEN '9' THEN BIGNUM := '玖';
WHEN '0' THEN BIGNUM := '零';
END CASE;
CASE MONEYPLACE
WHEN '-2' THEN RMB := '分';
WHEN '-1' THEN RMB := '角';
WHEN '0' THEN RMB := '元';
WHEN '1' THEN RMB := '拾';
WHEN '2' THEN RMB := '佰';
WHEN '3' THEN RMB := '仟';
WHEN '4' THEN RMB := '萬';
WHEN '5' THEN RMB := '拾';
WHEN '6' THEN RMB := '佰';
WHEN '7' THEN RMB := '仟';
WHEN '8' THEN RMB := '亿';
WHEN '9' THEN RMB := '拾';
WHEN '10' THEN RMB := '佰';
WHEN '11' THEN BIGNUM := '仟';
END CASE;
MONEYPLACE := MONEYPLACE + 1;
IF BIGWRITE IS NULL THEN
BIGWRITE := BIGNUM || RMB;
ELSE
BIGWRITE := BIGNUM || RMB || BIGWRITE;
END IF;
END IF;
END LOOP;
RETURN BIGWRITE;
EXCEPTION -- 异常处理部分
WHEN MYEXCEPTION THEN
DBMS_OUTPUT.PUT_LINE('该函数只能转换长度不大于14位或整数位不大于12位的钱数!');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('不是有效的钱数!');
END SMALITOBLG;