ORACLE在實現報表的功能是很強大的
特別在現實的應用中會經常用到人民幣大小寫轉換的問題
在此我寫個函數向大家簡單介紹一下
希望和大家一起探討
以便共同進步! 共同發展!
函數DX_MONEY() CREATE FUNCTION DX_MONEY
(
MONEY IN NUMBER
)
RETURN VARCHAR
AS V_MONEY VARCHAR
(
);
RV_MONEY
VARCHAR
(
);
RV_MONEY
VARCHAR
(
);
RV_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
V_MONEY
VARCHAR
(
);
RPV_MONEY
VARCHAR
(
);
RPV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
PV_MONEY
VARCHAR
(
);
BEGIN
V_MONEY
:=LTRIM(RTRIM(TO_CHAR(FLOOR(MONEY))));
RV_MONEY
:=LTRIM(RTRIM(TO_CHAR(FLOOR(MONEY*
))));
RV_MONEY
:=SUBSTR(RV_MONEY
LENGTH(RV_MONEY
)
);
IF LENGTH(RV_MONEY
)>
THEN
RV_MONEY
:=SUBSTR(RV_MONEY
LENGTH(RV_MONEY
)
);
ELSE
RV_MONEY
:=
;
END IF;
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
IF LENGTH(V_MONEY
)
>
THEN
V_MONEY
:=SUBSTR(V_MONEY
LENGTH(V_MONEY
)
);
ELSE V_MONEY
:=
;
END IF;
select DECODE(RV_MONEY
零分
壹分
貳分
參分
肆分
伍分
陸分
柒分
扒分
玖分
) into rpv_money
from dual;
select DECODE(RV_MONEY
零角
壹角
貳角
參角
肆角
伍角
陸角
柒角
扒角
玖角
) into rpv_money
from dual;
select DECODE(V_MONEY
元
壹元
貳元
參元
肆元
伍元
陸元
柒元
扒元
玖元
) into pv_money
from dual;
select DECODE(V_MONEY
壹拾
貳拾
參拾
肆拾
伍拾
陸拾
柒拾
扒拾
玖拾
) into pv_money
from dual;
select DECODE(V_MONEY
壹佰
貳佰
參佰
肆佰
伍佰
陸佰
柒佰
扒佰
玖佰
) into pv_money
from dual;
select DECODE(V_MONEY
壹仟
貳仟
參仟
肆仟
伍仟
陸仟
柒仟
扒仟
玖仟
) into pv_money
from dual;
select DECODE(V_MONEY
萬
壹萬
貳萬
參萬
肆萬
伍萬
陸萬
柒萬
扒萬
玖萬
) into pv_money
from dual;
select DECODE(V_MONEY
壹拾
貳拾
參拾
肆拾
伍拾
陸拾
柒拾
扒拾
玖拾
) into pv_money
from dual;
select DECODE(V_MONEY
壹佰
貳佰
參佰
肆佰
伍佰
陸佰
柒佰
扒佰
玖佰
) into pv_money
from dual;
select DECODE(V_MONEY
壹仟
貳仟
參仟
肆仟
伍仟
陸仟
柒仟
扒仟
玖仟
) into pv_money
from dual;
select DECODE(V_MONEY
億
壹億
貳億
參億
肆億
伍億
陸億
柒億
扒億
玖億
) into pv_money
from dual;
select DECODE(V_MONEY
壹拾
貳拾
參拾
肆拾
伍拾
陸拾
柒拾
扒拾
玖拾
) into pv_money
from dual;
select DECODE(V_MONEY
壹佰
貳佰
參佰
肆佰
伍佰
陸佰
柒佰
扒佰
玖佰
) into pv_money
from dual;
select DECODE(V_MONEY
壹仟
貳仟
參仟
肆仟
伍仟
陸仟
柒仟
扒仟
玖仟
) into pv_money
from dual;
V_MONEY:=PV_MONEY
||PV_MONEY
||PV_MONEY
||PV_MONEY
||PV_MONEY
||
PV_MONEY
||PV_MONEY
||PV_MONEY
||PV_MONEY
||PV_MONEY
||PV_MONEY
||PV_MONEY
||
RPV_MONEY
||RPV_MONEY
;
RETURN (V_MONEY);
END;
執行狀況如下: SQL*Plus: Release
Production on 星期二
月
:
:
Copyright (c)
Oracle Corporation
All rights reserved
連線到:
Oracle
i Enterprise Edition Release
Production
With the Partitioning option
JServer Release
Production
SQL> select dx_money(
) from dual;
DX_MONEY(
)
參億貳仟肆佰肆拾伍萬伍佰陸拾柒元扒角玖分
本例的最大數字
以上函數寫的比較簡單易懂 語法上不一定精簡 歡迎大家一起探討!
From:http://tw.wingwit.com/Article/program/Oracle/201311/18555.html