OCI-22053: overflow error 问题

在.NET中连接oracle,使用dataadapter fill的时候出现OCI-22053: overflow error的异常,因为.NET的数据类型精度比oracle的类型精度小,类如

select sysdate-issuetime as timediff from sometable中返回的精度过大,改为

select trunc(sysdate-issuetime,2) as timediff from sometable后就可以了。

在网上有另外一些处理方法:

http://excel.cnblogs.com/archive/2005/11/14/276202.html 使用新版ODP.NET的da.SafeMapping.Add(字段名1,typeof(System.String));方法把所有字段转为string类型。不过上了oracle网站看了一下,发现9207版的ODAC要80M。。。懒得下载了。。

 

Oracle 数值数据类型最多可存储 38 个字节的精度。
当将 Oracle 数值转换为公共语言运行库数据类型时,
Oracle 值可能会变得过大。这会导致 Oracle OCI-22053 溢出错误。

解决方法是用round函数。

如何使用 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

 

 

转自: http://blog.csdn.net/xeonol/article/details/726133

你可能感兴趣的:(Others)