网上找了好几篇博客,测试或多或少有问题,以下已验证可以使用。
create or replace function cux_convert_cny(p_num in number default null)
return nvarchar2 is
Result nvarchar2(100); --返回字符串
num_round nvarchar2(100) := to_char(abs(round(p_num, 2))); --转换数字为小数点后2位的字符(正数)
num_left nvarchar2(100); --小数点左边的数字
num_right nvarchar2(2); --小数点右边的数字
str1 nchar(10) := '零壹贰参肆伍陆柒捌玖'; --数字大写
str2 nchar(16) := '元拾佰仟万拾佰仟亿拾佰仟万拾佰仟'; --数字位数(从低至高)
num_pre number(1) := 1; --前一位上的数字
num_current number(1); --当前位上的数字
num_count number := 0; --当前数字位数
begin
if p_num is null then
return null;
end if; --转换数字为null时返回null
select to_char(nvl(substr(to_char(num_round),