li
  当前位置:主页 > 性能优化 > 文章内容
li
数值超过NUMBER最大表示范围的问题(一)
来源: http://yangtingkun.itpub.net/  作者: yangtingkun    时间:2008-01-26   阅读:4  

昨天同事给我出了一道简单的题——计算1阶乘到100阶乘的累加。问题似乎很简单,但是最终引出的问题并不简单。


刚开始觉得问题很简单,写了一个简单的函数:

SQL> CREATE OR REPLACE FUNCTION F_SUM_MULTI(P_IN IN NUMBER) RETURN NUMBER AS
2 V_RESULT_MULTI NUMBER DEFAULT 1;
3 V_RESULT NUMBER DEFAULT 0;
4 BEGIN
5 FOR I IN 1..P_IN LOOP
6 V_RESULT_MULTI := V_RESULT_MULTI * I;
7 V_RESULT := V_RESULT V_RESULT_MULTI;
8 END LOOP;
9 RETURN V_RESULT;
10 END;
11 /

函数已创建。

SQL> SELECT F_SUM_MULTI(5) FROM DUAL;

F_SUM_MULTI(5)
--------------
153

代码很简单,功能也已经实现了。但是,问题并不想我想的这么简单。

SQL> SELECT F_SUM_MULTI(100) FROM DUAL;

F_SUM_MULTI(100)
----------------
~

奇怪,输出结果为什么会是~呢?莫非是超过了NUMBER能表示的最大的范围?

SQL> SELECT F_SUM_MULTI(83) FROM DUAL;

F_SUM_MULTI(83)
---------------
3.994E 124

SQL> SELECT F_SUM_MULTI(84) FROM DUAL;

F_SUM_MULTI(84)
---------------
~

果然是超过了NUMBER能表示的最大的范围。NUMBER类型能表达的最大值是9.9999999999999999999999999999999999*10E125。以前还从没有碰到过超出Oracle最大处理范围的情况,也一直没有想到过会碰到超出最大精度。看来阶乘不愧是结果增长最迅速的操作。

由于超过了Oracle能处理的最大值,Oracle已经很难处理这个问题了。莫非已经没有办法来处理这个问题了?(待续)




  上一篇: VIEWS是关键字吗   下一篇: 数值超过NUMBER最大表示范围的问...
li
 §相关评论  
 热点文章

·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 编辑推荐
·Resize datafile导致ASM Crash
·在Oracle10g RAC下新增ASM磁盘
·ORACLE SQL性能优化系列 (一)
·oracle性能调优:管理oracle日志
·oracle RAC环境中系统时钟的调
·why:Rac的心跳线不支持交叉线?
·RAC的VIP及实例依赖关系:版本O
·如何启动DataGuard的备用数据库
·系统表空间IO错误 数据损坏处理
·不幸中的万幸:遭遇ORA-00600 [
·用ORACLE的高级复制实现内外网
li
 相关篇章
·VIEWS是关键字吗
·调用者权限存储过程的权限特点
·调用者权限过程的权限问题
·新增对象对调用者权限存储过程的...
·新建对象也可能导致存储过程的失...
·将IP地址转化为数值
·UTL_FILE包的简单例子
·计算个人所得税的函数
·一个处理操作系统文件属性的小函...
·自定义聚集函数访问远端对象(三...
·数值超过NUMBER最大表示范围的问...
·数值超过NUMBER最大表示范围的问...
·数值超过NUMBER最大表示范围的问...
·数值超过NUMBER最大表示范围的问...
·ORA-28595错误
·ORA-19206错误
·利用DBMS_METADATA包获取权限信息
·TO_LOB函数
·Oracle9i的1467错误
·一个INSTEAD OF TRIGGER的例子
 
li
设为首页 | 关于我们 | 技术服务 | 收藏本站 | 网站地图 | 联系方式 | 本站友情连接