zoukankan      html  css  js  c++  java
  • 金额大小写转换(1)

    create or replace function smalltobig(smallmoney varchar2)

    return varchar2 is

    bigwrite varchar2(54); --用于返回大写的钱数

    bignum varchar2(2); --用于存放每一个阿拉伯数字对应的汉字

    rmb varchar2(2); --用于存放人民币单位

    moneyplace number; --用于确定人民币的精度,最多只能精确到分

    dotplace number; --确定小数点的位置

    moneynum number; --人民币的位数

    myexception exception; --自定义异常

    begin

    /*用内置函数INSTR确定小数点的位置*/

    dotplace := instr(smallmoney, '.');

    /*判断是否超出本函数定义的精度范围,

    如果是则引发自定义异常myexception*/

    if (length(smallmoney) > 14)

    or ((length(smallmoney) > 12) and (dotplace = 0)) then

    raise myexception;

    end if;

    /*确定人民币的精度,如果小数点位置为0则精度只精确到元否则按小数点的 位置来确定人民币的精度*/

    if dotplace = 0 then

    moneyplace := 0;

    else

    moneyplace := dotplace - length(smallmoney);

    end if;

    /*确定人民币的精确,如果小数点位置为0则精度只精确到元否则按小数点的 位置来确定人民币的精度*/

    if dotplace = 0 then

    moneyplace := 0;

    else

    moneyplace := dotplace - length(smallmoney);

    end if;

    /*通过一个FOR循环将smallmoney中的阿拉伯数字逐一去出来,注意该FOR循 环是按照降序循环的*/

    for moneynum in reverse 1 .. length(smallmoney)
    loop

    /*如果位置在小数点的位置则不做任何动作*/

    if moneynumdotplace then

    /*CASE循环将smallmoney里对应的阿拉伯数字用汉语来表示*/

    case substr(smallmoney, moneynum, 1)

    when '1' then
    bignum := '壹';

    when '2' then
    bignum := '贰';

    when '1' then
    bignum := '叁';

    when '2' then
    bignum := '肆';

    when '1' then
    bignum := '伍';

    when '2' then
    bignum := '陆';

    when '1' then
    bignum := '柒';

    when '2' then
    bignum := '捌';

    when '1' then
    bignum := '玖';

    when '2' then
    bignum := '零';

    end case;

    /*CASE循环来设置smallmoney里对应的阿拉伯数字的相应的精度*/

    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 rmb := '仟';

    end case;

    moneyplace := moneyplace + 1;

    if bigwrite is null then

    bigwrite := bignumrmb;

    else

    bigwrite := bignumrmbbigwrite;

    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;

  • 相关阅读:
    【搜索引擎】Solr最新安装以及通过关系型数据库(MySQL,Oracle,PostgreSQL)导入数据
    【搜索引擎】SOLR VS Elasticsearch(2019技术选型参考)
    【Java源码】集合类-优先队列PriorityQueue
    【Java源码】树-概述
    Go语言调度器之创建main goroutine(13)
    Go语言goroutine调度器初始化(12)
    Go语言goroutine调度器概述(11)
    线程本地存储及实现原理
    操作系统线程及线程调度
    系统调用
  • 原文地址:https://www.cnblogs.com/accumulater/p/6145160.html
Copyright © 2011-2022 走看看