ITPub博客

首页 > Linux操作系统 > Linux操作系统 > NUMBER精度问题

NUMBER精度问题

原创 Linux操作系统 作者:husthxd 时间:2008-12-30 17:33:55 0 删除 编辑

今天在调试存储过程时碰到一个跟NUMBER相关的问题。

先看现象:

存储过程A:输入参数p1 in NUMBER,过程中p1作为条件用于查询某张表T的数据,条件为T.XH = p1,XH定义为NUMBER(16);

存储过程B循环读取临时表tmp_t中一个NUMBER(16)的字段XH,作为入参调用存储过程A,这时候调用A始终得不到想要的结果。把入参p1类型改为VARCHAR2后就正常了。原因未深究,初步判断是由于对于NUMBER的字段,当数据大于15位如100000000000000这样的数据ORACLE就用科学技术法来存储了, 超过15位,在调用存储过程时精度好像就丢失了。

另外一种解决方案是在存储过程A中,定义变量v_xh number(16) := p1;把p1的值赋给v_xh,之后过程中使用变量v_xh而不是p1即可。


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/6906/viewspace-524682/,如需转载,请注明出处,否则将追究法律责任。

上一篇: 华东十日游(5)
请登录后发表评论 登录
全部评论
ITPUB数据库版块资深版主,对Oracle、PostgreSQL有深入研究。

注册时间:2007-12-28

  • 博文量
    1471
  • 访问量
    3904112