昨天在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 时,出现“算术运算导致溢出”问题,如何解决?的更多相关文章

  1. 使用sqlplus执行sql时,发现有中文有乱码解决方法

    https://blog.csdn.net/fyyinjing/article/details/77877239

  2. sql语句执行时算术运算导致溢出。

    执行sql语句时报错: 用户代码未处理 System.OverflowException HResult=-2146233066 Message=算术运算导致溢出. 文章:https://bbs.cs ...

  3. 执行sql时出现错误 extraneous input ';' expecting EOF near '<EOF>'

    调用jdbc执行hive sql时出现错误 Error while compiling statement: FAILED: ParseException line 5:22 extraneous i ...

  4. 执行SQL时出现: ORDER BY clause is not in GROUP BY clause and contains nonaggregated c

    注意: 采用navicat新建数据库时,需要将编码方式设置为,字符集:utf8 -- UTF-8 Unicode ,排序规则:utf8_general_ci 在运行sql语句时,出现以下问题: [Er ...

  5. C#报算术运算导致溢出的错误

    如果是在fill datatable时报这个错,是因为所查询的数据中有在数据库中为NUMBER类型的字段,这种类型C#中不能识别,需TO_CHAR转换成字符型,就不会再报这个错了. e.g. SELE ...

  6. iBatis应用--控制执行SQL时的超时时间

    https://blog.csdn.net/jackie_xiaonan/article/details/8459320

  7. 【转】.net算术运算导致溢出

    源地址:http://blog.csdn.net/hawksoft/article/details/70470136

  8. SQL执行SQL语句提示 "内存不足"(insufficient memory....)的解决方法

    由于本地执行的sql script的文件太大但是本地sql的运行内存有限,当我在MSSql的工具上运行这份178M左右的脚本的时候 它会提示 如下错误(Insufficient memory to c ...

  9. 对hadoop 执行mapreduce时发生异常Illegal partition for的解决过程

    来自:http://blog.csdn.net/hezuoxiang/article/details/6878026 写了个mapreduce的JAVA程序,自定义了个partition class ...

随机推荐

  1. Java里的String类为什么是final的

    今天在看<图解设计模式>,里面出了一个问题“String类用final修饰,导致它无法被继承(扩展),这样做违反了开闭原则,这么做有什么正当理由?” 答案是效率和安全性  首先是效率,由于 ...

  2. 如何连接oracle 12c可插拔数据库

    启动根容器:[oracle@eric ~]$ export ORACLE_SID=cup[oracle@eric ~]$ sqlplus / as sysdbaSQL*Plus: Release 12 ...

  3. 学习笔记15—Python 存储集

    1. save using pickle      with open('F:/BrainAging/result/ordered_data_final_just_TD_leaveOne.pickle ...

  4. isA,小赋值大

    class Student:Person{ }; Student s; 1. Person p=s;  // 可以将具体的赋值给大的,指针也行. 2. Person * p=new Student; ...

  5. gulp自动化打包工具

    /** * Created by hasee on 2016/7/5. */var gulp = require('gulp');var sass = require('gulp-sass');//容 ...

  6. compile FFMPEG under windows

    这个文章应该算是中文版最好的了.但是还有一些需要修正. 特别是winsock2的处理 win10 msys2 vs2015 ffmpeg3.2.2 编译 这个英文版的才是最好的 Building ff ...

  7. 用 EasyUEFI 在 Win8/10 中硬盘安装 Ubuntu16.04图文教程

    用 EasyUEFI 在 Win8/10 中硬盘安装 Ubuntu 作者:TeliuTe 来源:基础教程网 1.准备Ubuntu安装文件 1)下载带amd的64位 Ubuntu 桌面版光盘镜像文件,如 ...

  8. android -------- 混淆打包报错(warning - InnerClass annotations are missing corresponding EnclosingMember annotations)

    最近做Android混淆打包遇到一些问题,Android Sdutio 3.1 版本打包的 错误如下: Android studio warning - InnerClass annotations ...

  9. 02linux 基本命令

    系统环境变量的设置 以nginx为例: 方式一: ~/.bash_profile  这是个人的 /etc/profile 为系统的环境变量 vim /etc/profile.d/nginx.sh #在 ...

  10. 『Numpy』np.ravel()和np.flatten()

    What is the difference between flatten and ravel functions in numpy? 两者的功能是一致的,将多维数组降为一维,但是两者的区别是返回拷 ...