C#执行Sql 时,出现“算术运算导致溢出”问题,如何解决?
昨天在C#执行oracle的sql语句时,总是报错,原先在pl/sql 执行sql语句是可以的,在C#执行就报“算术运算导致溢出”问题
SQL语句
select A.SKU_ID 商品标识,A.COLOR 货主编码,B.NAME 货主名称,C.NAME 商品名称,A.RCV_DATE_TIME 入库日期,A.XPIRE_DATE 失效日期,
TO_NUMBER(TO_DATE(sysdate,'yyyy-mm-dd hh24:mi:ss')- TO_DATE(A.RCV_DATE_TIME,'yyyy-mm-dd hh24:mi:ss')) 入库天数,
TO_NUMBER(TO_DATE(A.XPIRE_DATE,'yyyy-mm-dd hh24:mi:ss')- TO_DATE(sysdate,'yyyy-mm-dd hh24:mi:ss')) 效期天数
from C_INV_3PL@TMS20_TEST A
left join Dxc_Consignor B on A.COLOR= B.CODE
left join Dxc_Goods C on A.SKU_ID = C.WMSCODE
where B.MID=22 and C.IMPORTANCE=1
SQL查询结果

在C#执行时,log日志异常信息
-- ::, [] DEBUG Sys - select * from
(
select A.SKU_ID 商品标识,A.COLOR 货主编码,B.NAME 货主名称,C.NAME 商品名称,A.RCV_DATE_TIME 入库日期,A.XPIRE_DATE 失效日期,
TO_NUMBER(TO_DATE(sysdate,'yyyy-mm-dd hh24:mi:ss')- TO_DATE(A.RCV_DATE_TIME,'yyyy-mm-dd hh24:mi:ss')) 入库天数,
TO_NUMBER(TO_DATE(A.XPIRE_DATE,'yyyy-mm-dd hh24:mi:ss')- TO_DATE(sysdate,'yyyy-mm-dd hh24:mi:ss')) 效期天数
from C_INV_3PL@TMS20_TEST A
left join Dxc_Consignor B on A.COLOR= B.CODE
left join Dxc_Goods C on A.SKU_ID = C.WMSCODE
where B.MID= and C.IMPORTANCE=
)
where fluentdata_RowNumber between and
order by fluentdata_RowNumber
-- ::, [] ERROR ServiceDXC_MAINTAIN - 获取动态列表失败
System.OverflowException: 算术运算导致溢出。
最后,百度一下,终于知道原因了。
问题原因:
Oracle的精度和C#之间的精度是不一致的,因为我的SQL语句用到计算两个日期相差天数的函数(TO_NUMBER),
在pl/sql中执行看到小数位非常长,这个是导致C#执行出错的原因。
解决方法:
在原先计算函数前面添加Round()函数,用来把精度降低到可一定范围。
select A.SKU_ID 商品标识,A.COLOR 货主编码,B.NAME 货主名称,C.NAME 商品名称,A.RCV_DATE_TIME 入库日期,A.XPIRE_DATE 失效日期,
round(TO_NUMBER(TO_DATE(sysdate,'yyyy-mm-dd hh24:mi:ss')- TO_DATE(A.RCV_DATE_TIME,'yyyy-mm-dd hh24:mi:ss')),2)入库天数,
round(TO_NUMBER(TO_DATE(A.XPIRE_DATE,'yyyy-mm-dd hh24:mi:ss')- TO_DATE(sysdate,'yyyy-mm-dd hh24:mi:ss')),2) 效期天数
from C_INV_3PL@TMS20_TEST A
left join Dxc_Consignor B on A.COLOR= B.CODE
left join Dxc_Goods C on A.SKU_ID = C.WMSCODE
where B.MID=22 and C.IMPORTANCE=1
PS: 使用oracle计算函数时(AVE()、TO_NUMBER()、SUM()等),都可用round()来把精度降低
C#执行Sql 时,出现“算术运算导致溢出”问题,如何解决?的更多相关文章
- 使用sqlplus执行sql时,发现有中文有乱码解决方法
https://blog.csdn.net/fyyinjing/article/details/77877239
- sql语句执行时算术运算导致溢出。
执行sql语句时报错: 用户代码未处理 System.OverflowException HResult=-2146233066 Message=算术运算导致溢出. 文章:https://bbs.cs ...
- 执行sql时出现错误 extraneous input ';' expecting EOF near '<EOF>'
调用jdbc执行hive sql时出现错误 Error while compiling statement: FAILED: ParseException line 5:22 extraneous i ...
- 执行SQL时出现: ORDER BY clause is not in GROUP BY clause and contains nonaggregated c
注意: 采用navicat新建数据库时,需要将编码方式设置为,字符集:utf8 -- UTF-8 Unicode ,排序规则:utf8_general_ci 在运行sql语句时,出现以下问题: [Er ...
- C#报算术运算导致溢出的错误
如果是在fill datatable时报这个错,是因为所查询的数据中有在数据库中为NUMBER类型的字段,这种类型C#中不能识别,需TO_CHAR转换成字符型,就不会再报这个错了. e.g. SELE ...
- iBatis应用--控制执行SQL时的超时时间
https://blog.csdn.net/jackie_xiaonan/article/details/8459320
- 【转】.net算术运算导致溢出
源地址:http://blog.csdn.net/hawksoft/article/details/70470136
- SQL执行SQL语句提示 "内存不足"(insufficient memory....)的解决方法
由于本地执行的sql script的文件太大但是本地sql的运行内存有限,当我在MSSql的工具上运行这份178M左右的脚本的时候 它会提示 如下错误(Insufficient memory to c ...
- 对hadoop 执行mapreduce时发生异常Illegal partition for的解决过程
来自:http://blog.csdn.net/hezuoxiang/article/details/6878026 写了个mapreduce的JAVA程序,自定义了个partition class ...
随机推荐
- PHP里获取一维数组里的最大值和最小值
<?php $arr = ['10','100','50','90','2','5']; $min = min($arr); $max = max($arr); echo $min.PHP_EO ...
- Entity Framework框架 (一)
1. Entity Framework的详细介绍: Entity Framework简称EF,与Asp.net关系与Ado.net关系. Entity Framework是ado.net中的一组支持开 ...
- git 命令详解
初始化仓库 git init命令将目录初始化为一个仓库 git init 目录名 git 撤销commit git reset --hard <commit_id> git push or ...
- C++ 实现sqilte创建数据库插入、更新、查询、删除
C/C++ Interface APIs Following are important C/C++ SQLite interface routines, which can suffice your ...
- PHP中json数组与对象的问题
在PHP后端,对于数组和对象的区分不是很大,主要用到的数组居多,而PHP提供接口时响应的一般是json数据(为什么使用json呢,总体来说就是体积小速度快).但是前端对数组对象很'敏感',所以对PHP ...
- 拖图UI和纯代码UI
1拖图UI, 优点:适合快速实验各种天马行空的想法 缺点:太多的storyBoard不好管理,不适合较大的项目,如果一个项目有价值,或成熟了,为了维护拓展,就最好改为纯代码 2纯代码UI 优点:1好维 ...
- Redisson实现分布式锁(一)
为什么要使用分布式锁? 单机情况下,多线程同时访问并改变临界资源(可变共享变量),将会使得这个变量不可预知,所以我们引入了同步(lock—synchronized).但在分布式场景下(多机部署),业务 ...
- 安卓中使用OkHttp发送数据请求的两种方式(同、异步的GET、POST) 示例-- Android基础
1.首先看一下最终效果的截图,看看是不是你想要的,这个年代大家都很忙,开门见山很重要! 简要说下,点击不同按钮可以实现通过不同的方式发送OkHttp请求,并返回数据,这里请求的是网页,所以返回的都是些 ...
- 如何使用mysql profiling功能分析单条查询语句
Mysql从5.1版本开始引入show profile来剖析单条语句功能 一. 查看是否支持这个功能 yes表示支持 mysql> show variables like 'have_profi ...
- 使用AutoCloseable 实现自动关闭资源
一.认识AutoCloseable AutoCloseable接口位于java.lang包下,从JDK1.7开始引入. 1.在1.7之前,我们通过try{} finally{} 在finally中释放 ...