首页 > Linux操作系统 > Linux操作系统 > NUMBER精度问题
今天在调试存储过程时碰到一个跟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/,如需转载,请注明出处,否则将追究法律责任。