[OCI-22053: 溢出错误]和[十进制数的小数位数值必须介于 0 和 28 之间(包括 0 和 28)]异常的原因和解决方法
OCI-22053: 溢出错误的原因和解决方法
Oracle 数值数据类型最多可存储 38 个字节的精度。当将 Oracle 数值转换为公共语言运行库数据类型时,
Oracle 值可能会变得过大。这会导致 Oracle OCI-22053 溢出错误。
贴过来的
解决办法:
1.使用Round函数:SELECT ROUND(1/3,2) FROM DUAL
2.使用TO_CHAR:SELECT TO_CHAR(1/3) FROM DUAL
第一种会减小精度,但数据类型不变,第二种则不会改变精度,但数据类型改变。
如何使用 Oracle Round 函數 (四捨五入)
描述 : 傳回一個數值,該數值是按照指定的小數位元數進行四捨五入運算的結果。
SELECT ROUND( number, [ decimal_places ] ) FROM DUAL
參數:
number : 欲處理之數值
decimal_places : 四捨五入 , 小數取幾位 ( 預設為 0 )
Sample :
select round(123.456) from dual; 回傳 123
select round(123.456, 0) from dual; 回傳 123
select round(123.456, 1) from dual; 回傳 123.5
select round(123.456, 2) from dual; 回傳 123.46
select round(123.456, 3) from dual; 回傳 123.456
select round(-123.456, 2) from dual; 回傳 -123.46
============================================
其实这是ORACLE和.net间的一个兼容性的问题,若oracle的字段类型为float,可以取值范围超过28位小数,而.net的DataTable对小数只能保留到28位,对float字段用round(字段名,28)处理一下,即可排除掉该错误