我的表格结构
CREATE TABLE ACCT
(ACCT_NO varchar2(15),
CASH number(20,4))
当前数据:
ACCT_NO CASH
12 1E16
当我尝试将ORA-01438: value larger than specified precision allowed for this column
的值作为CASH
插入新记录时,我收到错误1E16
。
INSERT INTO ACCT VALUES(12, 1E16)
但如果我尝试复制并插入现有数据,则效果很好。
INSERT INTO acct
select * FROM ACCT
WHERE acct=12
我打错了什么?
我知道精度也包括比例长度,即NUMBER(20,4)
表示16位精度.
4位数刻度。那么为什么有一个17位精度的数据呢?如果我重新插入相同的数据,我将面临任何错误?
编辑1:
SELECT TO_CHAR(CASH) FROM ACCT
返回9999999999999999
(16位数)。
但是,SELECT CASH FROM ACCT
会返回1E16
。
因此,oracle正在向现有数据9999999999999999
添加1并将我的数据显示为1E16
,即9999999999999999+1=1E16
此表中有大约300万个数据,我提供给客户的数据提取显示为1E16
而不是9999999999999999
。不知不觉的用户的完全盲点。
此类数据可能在任何其他表中都可用。是否有任何解决方案,以便SELECT CASH FROM ACCT
查询显示9999999999999999
而不是1E16