ORACLE数字转换人民币大写示例分析

简介: ORACLE数字转换人民币大写示例分析,代码解析。

示例.

数字 :183066999230.68
人民币大写 :壹仟捌佰参拾亿陆仟陆佰玖拾玖万玖仟贰佰参拾圆陆角捌分

数字 :999900000000
人民币大写 :玖仟玖佰玖拾玖亿圆整

Step 1. Create Lookups: CUX_CNY_DICTIONARY
(N) Application Developer > Application > Lookups > Application Object Library
clip_image002[4]

Application Object Library Lookups
Type
CUX_CNY_DICTIONARY
Access Level

l
User

Extensible

System
Meaning
CUX_CNY_DICTIONARY
Application
Application Object Library
Description
CNY character translation

Code
Meaning
Description
Tag
From
To
Enabled
[ ]
0

*

1

*

2

*

3

*

4

*

5

*

6

*

7

*

8

*

9

*

Q

*

B

*

S

*

Y
亿

*

W

*

U

*

Z

*

J

*

F

*

Step 2. Create Function: CUX_CONVERT_CNY
create or replace function cux_convert_cny(num in number) return varchar2
is
l_receive_number number(14,2);
l_number varchar2(100);
l_num_length number;
l_unit varchar2(100) := 'QBSGYQBSGWQBSG.JF';
l_cny varchar2(200);
l_trans_cny varchar2(200);

function translater(transNum in varchar2) return varchar2
is
l_meaning varchar2(80);
begin
select flv.meaning
into l_meaning
from fnd_lookup_values_vl flv
where 1 = 1

   and flv.enabled_flag = 'Y'
   and sysdate between nvl (flv.start_date_active, sysdate)
                   and nvl (flv.end_date_active, sysdate + 1)      
   and flv.lookup_code = transNum
   and flv.lookup_type = 'CUX_CNY_DICTIONARY'
   and flv.view_application_id = 0
   and flv.security_group_id = 0;

return l_meaning;
end translater;

begin

--checking input number throw exception
select decode(num, 0, 'x', num) into l_receive_number from dual;
l_number := trim(to_char(l_receive_number, '9999,9999,9999.99'));
l_num_length := length(l_number);

--linking number and unit
for numIndex in 1..l_num_length loop

l_cny := l_cny || (substr(l_number, numIndex, 1) || substr(l_unit, -(l_num_length-numIndex+1), 1));

end loop;

--replace symbol
select regexp_replace(l_cny, ',|.', '') into l_cny from dual;
--insert UZ to 0J0F
select regexp_replace(l_cny, '(0J0F)', 'UZ') into l_cny from dual;
--insert U to xJxF
select regexp_replace(l_cny, '([0-9]J[0-9]F)', 'U1') into l_cny from dual;
--replace more zero to blank
select regexp_replace(l_cny, '(0Q0B0S0GW)|(0Q0B0S0G)|(0B0S0G)|(0S0G)|(0G)|(G)|(0J)|(0F)', '') into l_cny from dual;
--replace more zero to zero
select regexp_replace(l_cny, '(0Q0B0S)|(0Q0B)|(0Q)|(0B)|(0S)', '0') into l_cny from dual;

--translation
for transIndex in 1..length(l_cny) loop

l_trans_cny := l_trans_cny || translater(substr(l_cny,transIndex, 1));

end loop;

return l_trans_cny;
exception when others
then
fnd_file.put_line (fnd_file.output, sqlcode);
fnd_file.put_line (fnd_file.output, sqlerrm);
end;

Step 3. Apply Function: CUX_CONVERT_CNY

select cux_convert_cny (183066999230.68) cny from dual;
clip_image003[4]

select cux_convert_cny (999900000000) cny from dual;
clip_image004[4]

相关文章
|
Oracle 关系型数据库 数据库
Oracle生产数据库insert插入较慢分析过程和解决办法
Oracle生产数据库insert插入较慢分析过程和解决办法
323 0
|
1月前
|
Oracle 关系型数据库
oracle基本笔记整理及案例分析2
oracle基本笔记整理及案例分析2
12 0
|
1月前
|
Oracle 关系型数据库
oracle基本笔记整理及案例分析1
oracle基本笔记整理及案例分析1
17 0
|
2月前
|
存储 Oracle 关系型数据库
Oracle查询优化-提取姓名大写首字母缩写
【2月更文挑战第5天】【2月更文挑战第11篇】提取姓名大写首字母缩写
33 6
|
6月前
|
Oracle 关系型数据库 Java
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例
分享一个 Oracle RAC 模式下客户端建立JDBC初始连接时因ONS造成应用启动时卡顿30秒问题的排查分析案例
|
7月前
|
存储 Oracle 算法
数据库数据恢复-ORACLE数据库常见故障的数据恢复可能性分析
ORACLE数据库常见故障: 1、ORACLE数据库无法启动或无法正常工作。 2、ORACLE数据库ASM存储破坏。 3、ORACLE数据库数据文件丢失。 4、ORACLE数据库数据文件部分损坏。 5、ORACLE数据库DUMP文件损坏。
|
9月前
|
Oracle 关系型数据库 索引
Toad Oracle Parttion表分析
当一个数据表的数据达到几十亿笔的时候,对整个表做表分析代价较大。
74 0
|
11月前
|
Oracle 前端开发 关系型数据库
使用隐含参数_disable_logging分析oracle写redo logfile的性能
oracle有一个隐含参数_disable_logging可以禁止日志的生成,这个参数当然不能在生产库使用,但我们可以将其因为与测试,例如,如果我们怀疑数据库写redo logfile存在性能问题,我们可以将这个参数设置为true,禁止写日志,看看oracle的性能提高了多少。
|
11月前
|
SQL 存储 Oracle
Oracle优化07-分析及动态采样-动态采样
Oracle优化07-分析及动态采样-动态采样
97 0
|
11月前
|
存储 Oracle 关系型数据库
Oracle优化07-分析及动态采样-DBMS_STATS 包
Oracle优化07-分析及动态采样-DBMS_STATS 包
86 0
Oracle优化07-分析及动态采样-DBMS_STATS 包