- 浏览: 106160 次
- 性别:
- 来自: 上海
最新评论
-
Seanman:
cuiyan3327 写道你好,看了您的帖子,非常好!我也正在 ...
Freemarker无法使用Session和Taglib -
Seanman:
Could not find an instance of f ...
Freemarker无法使用Session和Taglib -
NeverGiveUpToChange:
受教了!学习下……
oracle删除重复记录,只保留一条记录 -
liuxue0905:
还有这个是我提的一个问题,不知道你是否有解决办法。http:/ ...
解决Hibernate原生SQL映射问题 -
liuxue0905:
List list = getSession().create ...
解决Hibernate原生SQL映射问题
这是一个oracle函数,可以将阿拉伯数字与汉字进行相互转化,如1234567890.0123可以转化为“十二亿三千四百五十六万七千八百九十点零一二三”,同样也可以将汉字转化为对应的数字。
该函数支持千兆下的浮点数字,但不支持指数形式。
/* Formatted on 2009/12/22 17:03 (Formatter Plus v4.8.8) */ CREATE OR REPLACE PACKAGE czutil AS --将数字转化为汉字,支持千兆级数字的操作 FUNCTION num2chi (numvalue IN NUMBER) RETURN VARCHAR2; --将汉字转化为数字,支持千兆级数字的操作 FUNCTION chi2num (chivalue IN VARCHAR2) RETURN NUMBER; END; CREATE OR REPLACE PACKAGE BODY czutil AS FUNCTION num2chi (numvalue IN NUMBER) RETURN VARCHAR2 IS --汉字映射数字的映射表 TYPE MAP IS TABLE OF VARCHAR2 (10) INDEX BY BINARY_INTEGER; ling_jiu_map MAP; shibaiqian_map MAP; wanyizhao_map MAP; --临时变量 i INT := 0; --'临时变量 j INT := 0; --临时变量 k INT := 0; --临时变量 x INT := 0; --临时变量 y INT := 0; --临时变量 str VARCHAR2 (100) := ''; --临时变量 tmp VARCHAR2 (100) := ''; --临时变量 integer_part VARCHAR2 (100) := ''; --数字形式整数部分 float_part VARCHAR2 (100) := ''; --数字形式小数部分 returnvalue VARCHAR2 (100) := ''; --返回值 BEGIN --初始化数组 ling_jiu_map (0) := '零'; ling_jiu_map (1) := '一'; ling_jiu_map (2) := '二'; ling_jiu_map (3) := '三'; ling_jiu_map (4) := '四'; ling_jiu_map (5) := '五'; ling_jiu_map (6) := '六'; ling_jiu_map (7) := '七'; ling_jiu_map (8) := '八'; ling_jiu_map (9) := '九'; shibaiqian_map (0) := ''; shibaiqian_map (1) := '十'; shibaiqian_map (2) := '百'; shibaiqian_map (3) := '千'; wanyizhao_map (0) := ''; wanyizhao_map (1) := '万'; wanyizhao_map (2) := '亿'; wanyizhao_map (3) := '兆'; --将数字拆分为整数与浮点数两个数字数组 i := INSTR (numvalue, '.', 1); IF i = 0 THEN integer_part := SUBSTR (numvalue, 1); ELSE integer_part := FLOOR (numvalue); float_part := SUBSTR (numvalue, i + 1); END IF; --计算整数部分 i := LENGTH (integer_part); j := CEIL (i / 4); k := 0; --将整数部分每四个分为一个组 FOR k IN 0 .. j - 1 LOOP IF k = 0 THEN str := SUBSTR (integer_part, 1, i - 4 * j + 4); ELSE str := SUBSTR (integer_part, i - 4 * j + 4 * k + 1, 4); END IF; x := LENGTH (str); y := 0; tmp := ''; --将每个组中数据转化为汉字 FOR y IN 0 .. x - 1 LOOP tmp := tmp || ling_jiu_map (SUBSTR (str, y + 1, 1)) || shibaiqian_map (x - y - 1); END LOOP; --零处理 tmp := RTRIM (tmp, '零'); --去掉兆亿万前面个位上的零 tmp := REGEXP_REPLACE (tmp, '(零[千百十])', '零'); --千百十位上的零 tmp := REGEXP_REPLACE (tmp, '(零{2,})', '零'); --将千百十位上的零结合 returnvalue := returnvalue || tmp || wanyizhao_map (j - k - 1); END LOOP; --零处理 --去掉兆亿万上的零 returnvalue := REGEXP_REPLACE (returnvalue, '(零[兆亿万])', '零'); --将兆亿万位上的零结合 returnvalue := REGEXP_REPLACE (returnvalue, '(零{2,})', '零'); --简称十位上的一 returnvalue := REGEXP_REPLACE (returnvalue, '^一十', '十'); returnvalue := REGEXP_REPLACE (returnvalue, '零一十', '零十'); --放进返回结果 IF returnvalue IS NULL THEN returnvalue := '零'; END IF; IF float_part IS NOT NULL THEN --计算小数部分 k := 0; tmp := ''; FOR k IN 1 .. LENGTH (float_part) LOOP tmp := tmp || ling_jiu_map (SUBSTR (float_part, k, 1)); END LOOP; returnvalue := returnvalue || '点' || tmp; END IF; RETURN returnvalue; END; FUNCTION chi2num (chivalue IN VARCHAR2) RETURN NUMBER IS --汉字映射数字的映射表 TYPE MAP IS TABLE OF BINARY_INTEGER INDEX BY VARCHAR2 (10); ling_jiu_map MAP; shibaiqian_map MAP; wanyizhao_map MAP; --临时变量 i INT := 0; --'临时变量 j INT := 0; --临时变量 k INT := 0; --临时变量 x INT := 0; --临时变量 y INT := 0; --临时变量 str VARCHAR2 (100) := ''; --临时变量 tmp INT := 0; --临时变量 tmp2 INT := 0; --临时变量 integer_part VARCHAR2 (100) := ''; --数字形式整数部分 float_part VARCHAR2 (100) := ''; --数字形式小数部分 returnvalue NUMBER := 0; --返回值 BEGIN --初始化数组 ling_jiu_map ('零') := 0; ling_jiu_map ('一') := 1; ling_jiu_map ('二') := 2; ling_jiu_map ('三') := 3; ling_jiu_map ('四') := 4; ling_jiu_map ('五') := 5; ling_jiu_map ('六') := 6; ling_jiu_map ('七') := 7; ling_jiu_map ('八') := 8; ling_jiu_map ('九') := 9; shibaiqian_map ('') := 0; shibaiqian_map ('十') := 1; shibaiqian_map ('百') := 2; shibaiqian_map ('千') := 3; wanyizhao_map ('') := 0; wanyizhao_map ('万') := 1; wanyizhao_map ('亿') := 2; wanyizhao_map ('兆') := 3; --将十位上的一补充完整 str := REGEXP_REPLACE (chivalue, '^十', '一十'); str := REGEXP_REPLACE (str, '零十', '零一十'); --将数字拆分为整数与浮点数两个数字数组 i := INSTR (str, '点', 1); IF i = 0 THEN integer_part := SUBSTR (str, 1); ELSE integer_part := SUBSTR (str, 1, i - 1); float_part := SUBSTR (str, i + 1); END IF; --整型部分 x := LENGTH (integer_part); str := ''; tmp := 0; tmp2 := 0; FOR k IN 1 .. x LOOP str := SUBSTR (integer_part, k, 1); IF str IN ('万', '亿', '兆') THEN --当碰到万亿兆时 tmp := tmp + tmp2; returnvalue := returnvalue + tmp * POWER (10000, wanyizhao_map (str)); tmp := 0; tmp2 := 0; ELSIF str IN ('十', '百', '千') THEN --当碰到十百千时 tmp := tmp + tmp2 * POWER (10, shibaiqian_map (str)); tmp2 := 0; ELSE --当碰到数字时 tmp2 := ling_jiu_map (str); END IF; END LOOP; --最后将没有小于万位数加到整数中去 tmp := tmp + tmp2; returnvalue := returnvalue + tmp; IF float_part IS NOT NULL THEN --计算小数部分 k := 0; tmp := ''; FOR k IN 1 .. LENGTH (float_part) LOOP tmp := tmp || ling_jiu_map (SUBSTR (float_part, k, 1)); END LOOP; returnvalue := returnvalue || '.' || tmp; END IF; RETURN returnvalue; END; END czutil;
评论
3 楼
蔡华江
2011-08-26
应该是select czutil.num2chi(23) from dual; 调用,至于为什么出错,还真不清楚
2 楼
远去的渡口
2011-08-26
刚才想试试这个方法的效果,就在PL SQL中调用了,我知道调用存储过程是用call,所以就试了,
call call czutil.num2chi(23) ;
还有select czutil.num2chi(23) from dual;
怎么报“程序包或函数f_getcblrsl处于无效状态”,是不是哪里有拼写错误呢,我找了半天没看出来 还是我调用的不对呀
call call czutil.num2chi(23) ;
还有select czutil.num2chi(23) from dual;
怎么报“程序包或函数f_getcblrsl处于无效状态”,是不是哪里有拼写错误呢,我找了半天没看出来 还是我调用的不对呀
1 楼
远去的渡口
2011-08-26
很强大,我还从来没有在Oracle中写过这样的方法。
发表评论
-
出现Lob 段无法通过 XX 扩展异常
2010-01-06 08:51 3671今天在导入数据出现异常,如下所示: 写道 IMP-0005 ... -
ROWNUM与ROW_NUMBER()
2009-12-16 19:21 4654主要是在网上看到了一些关于排序分页的帖子,个人感觉 ... -
ODU——Oracle数据恢复软件
2009-12-03 12:41 515一次偶然的错 ... -
使用Oracle Text进行全文检索
2009-12-01 18:44 2383由于系统中数据不断增多,使得原用的like语法来进行查询法律全 ... -
使用DBMS_OUTPUT
2009-11-14 19:17 262设置DBMS_OUTPUT输出 set serveroutp ... -
oracle语义模式
2009-11-05 11:45 3403在进行数据库查询的时 ... -
Oracle树查询及相关函数
2009-10-29 16:15 3955Oracle树查询的最重要的就是select... ... -
oracle删除重复记录,只保留一条记录
2009-10-11 13:16 6158DELETE FROM hs a WHERE R ... -
EXECUTE IMMEDIATE用法小解
2009-10-11 02:31 3015EXECUTE IMMEDIATE 代替了以 ... -
Analytic Functions
2009-10-09 08:57 76Analytic functions compute an a ... -
Oracle在Debian下安装
2009-09-22 00:44 96从Oracle官方网站上下来Oracle11g安装包,两个共2 ... -
Oracle查看执行计划
2009-09-17 16:34 1321.Explain plan explain pla ... -
给主键建立索引
2009-09-17 14:50 881.查询表的主键信息 SELECT table_name,c ... -
sort_area_size设置
2009-09-16 18:38 476在需要执行大批量排序的批处理会话中增大sort_are ...
相关推荐
oracle数字转换中文,用我们更好地开发财务模块
参考了网上的SPELLCODE获得汉字首字母函数和f_getSpellcode函数,主要是把PIPE Row(spell_code('a', -20319))等内容改成了字符串再进行比较,效率提高了很多倍,基本响应速度在毫秒级。 在项目中得到了应用,像百度...
1、编写视图时遇到多选的字典编码需要转换多选的名称时,比如将‘1,2,3...’ 转换成‘是,否,未知’ 2、通过函数实现,传入值1)字段名,2)对应关系,返回翻译后的中文多选字符串。
8、将一个键盘输入的数字转化成中文输出 (例如:输入:1234567 输出:一百二拾三万四千五百六拾七) 用java语言实现,,请编一段程序实现! 9、设计4个线程,其中两个线程每次对j 增加 1,另外两个线程对j每次减少1。写出...
Oracle P/L SQL实现发送Email、浏览网页等网络操作功能 Oracle P/L SQL实现发送Email、浏览网页等网络操作功能,以下是此过程包的头部,包体经常打包处理plb,感兴趣用户可以下载下来。 --.使用聚合函数实现 多行...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...
实例112 解决用substr()函数对中文字符串截取时出现乱码的问题 143 实例113 字符串与HTML标记相互转换 144 实例114 运用PHP 5.0新型字符串输出XML数据 145 实例115 判断字符串中是否存在指定子串 146 2.9 正则表达式...
字符被转化成数字,利用其最初位置。在PHP手册中有详细的例子。 数组与哈希表 数组与哈希表以同样的方法被支持。怎样运用取决于你怎样定义它们。你可以用list()或者array()来定义它们,也可以直接为数组赋值。数组...
它们可以相互转化吗?你倾向于用哪种,为什么? 54 39、oracle数据库表的备份及还原 54 40、谈谈你知道的数据库和中间件 54 41、oracle和MySQL的区别 54 42、简述Mysql的InnoDb 55 43、删除重复数据只保留一条。 55 ...
70 <br>0096 如何将数字转换为字符串 70 <br>0097 如何将字符串转换为数字 70 <br>0098 如何将数字转换为日期格式 71 <br>0099 如何将数字转换为货币格式 71 <br>0100 将字母全部转换大写 ...
2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)...
84.8. 将一个键盘输入的数字转化成中文输出(例如:输入1234567,输出:一百二拾三万四千五百六拾七),请用java语言编一段程序实现! 114 84.9. 题目1:用1、2、2、3、4、5这六个数字,用java写一个main函数,打印出所有...
EcanConvertToCh C#将汉字转成拼音 PinYin 取汉字拼音的首字母,只要你输入一个汉字,或者是多个汉字就会取出相应的道字母,主要是方便查询使用的 复制代码 16.配置文件操作类 ConfigHelper 1.根据Key取Value值 2....
Oracle中PL/SQL单行函数和组函数详解 mssql+oracle Oracle编程的编码规范及命名规则 Oracle数据库字典介绍 0RACLE的字段类型 事务 CMT DEMO(容器管理事务演示) 事务隔离性的一些基础知识 在组件之间实现事务和异步...
你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。 Tomcat也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理...
你在浏览器中访问这个应用的Jsp时,通常第一次会很慢,因为Tomcat要将Jsp转化为Servlet文件,然后编译。编译以后,访问将会很快。 Tomcat也具有传统的Web服务器的功能:处理Html页面。但是与Apache相比,它的处理...
2.6.4. 将Spring 应用程序上下文部署为JCA adapter 2.6.5. 计划任务 2.6.6. 对Java 5 (Tiger) 支持 2.7. 移植到Spring 2.5 2.7.1. 改变 2.8. 更新的样例应用 2.9. 改进的文档 I. 核心技术 3. IoC(控制反转)...