同一SQL语句在PLSQL Developer与SQL * PLUS工具中执行结果不一致
背景
今天遇到如下问题,同一sql语句在PLSQL Developer与SQL*PLUS工具中执行结果不一致,
sql语句如下
SELECT 'GROUPHEALTH_SEND_EMAIL' as interface,
SUM(decode(se.status, 1, 0, 1)) AS count
, 0 AS processed
, SUM(decode(se.status, 1, 0, 1)) - 0 AS notprocessed
FROM cuan_doic.policy po
LEFT JOIN cuan_doic.role ro ON ro.topactualid = po.topactualid
AND ro.kind = 'BASICRISKINFOPA'
LEFT JOIN cuan_doic.property pr ON pr.parentactualid = ro.actualid
AND pr.topactualid = po.topactualid
AND pr.kind = 'GROUPTYPE'
LEFT JOIN cuan_doic.t_sendemailinfo se ON po.policyno = substr(emailcontent, INSTR(se.emailcontent, '保单号:', 1, 1) + 4, 12)
AND se.senderowner = 'UW_WECHAT'
WHERE 1 = 1
AND po.productcode = '00130001'
AND po.CURRENTFLAG = 'Y'
AND pr.value = '$$600062000006'
AND po.policyno IS NOT NULL;
在PLSQLDeveloper工具执行结果如下

在SQL*PLUS中执行结果如下

出现这种问题时候,有些老司机会问,是不是连接的数据库不一致,用户不一致,表的数据是不是一致?
经确认以上都是一致的,只是执行SQL的工具不一致。
分析
仔细观察SQL语句,有如下连接条件。
ON po.policyno = substr(emailcontent, INSTR(se.emailcontent, '保单号:', 1, 1) + 4, 12)
这里有中文字符,是不是这个导致的? 为证实自己的想法,把中文字符用英文代替。
ON po.policyno = substr(emailcontent, INSTR(se.emailcontent, 'bdh', 1, 1) + 4, 12)
再次执行的结果如下:
PLSQLDeveloper工具

SQL*PLUS工具

解决
此SQL执行造成不同结果是因为中文字符导致的。
所以我们可以调整SSH工具的字符编码与设置NLS_LANG参数,经调整之后,SQLPLUS工具也能输出正确结果。
export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16GBK"

同一SQL语句在PLSQL Developer与SQL * PLUS工具中执行结果不一致的更多相关文章
- 通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷
通过MyEclipse操作数据库,执行sql语句使我们不用切换多个工具,直接工作,方便快捷.效果如下: 步骤1:通过MyEclipse中的window->show View->ot ...
- java动态拼接sql语句并且执行时给sql语句的参数赋值
问题 在这里举一个例子,比如我要做一个多条件模糊查询,用户输入的时候有可能输入一个条件,也有可能输入两个条件,这时执行查询的sql语句就不确定了,但可以用动态拼接sql语句来解决这个问题. 解决方法 ...
- 后台异常 - sql语句查询出的结果与dao层返回的结果不一致
问题描述 sql语句查询出的结果与dao层返回的结果不一致 问题原因 (1)select 中,查询的列名称重复,数据出现错乱 (2)使用不等号,不等号(!=,<>),查询出来的结果集不包含 ...
- 解决Windows x64bit环境下无法使用PLSQL Developer连接到Oracle DB中的问题
本文是原创文章,转载请注明出处: http://blog.csdn.net/msdnchina/article/details/46416455 解决Windows x64bit环境下无法使用PLSQ ...
- 通过PLSQL Developer导入SQL文件
1.点击“工具” 2.选中其中的“导入表(L)”,在按下图所示操作: PLSQL Developer会自动运行相关命令,在Tables中刷新即可看到新导入的表.
- SQL Server数据库sql语句生成器(SqlDataToScript)的使用(sql server自增列(id)插入固定值)
SqlDataToScript是根据表数据进行生成 Insert Into语句,此工具还有一个好处是可以对自增列插入固定值,例如:自增的列id值为5,但是5这个行值已经删除,如果想存储Id自增列值为5 ...
- 【sql语句】好用的sql语句之项目数据库学习总结
转载请注明出处:http://blog.csdn.net/pearyangyang/article/details/41115491 这几天学习公司系统的数据流向.主要涉及到几个表的数据. 可是表中的 ...
- 巧用DISPLAY_AWR函数与dba_hist_sqlstat结合查询SQL语句在指定节点指定时间范围内的历史执行计划
1.问题 通过调用dbms_xplan包中DISPLAY_AWR函数(DBMS_XPLAN.DISPLAY_AWR)可以从AWR数据中查看到SQL语句的历史执行计划,但是,DISPLAY ...
- ADO.NET 中可以发送包含多个SQL语句的批处理脚本到SQL Server,但是用MySQL的ODBC驱动不行
众所周知,我们在ADO.NET中可以使用NuGet包System.Data.SqlClient来操作SQL Server,并且ADO.NET是支持向SQL Server发送包含多个SQL语句的批处理脚 ...
随机推荐
- bzoj 2626: JZPFAR【KD-tree】
和3053差不多,把pair first做成负数就可以用大根堆维护了 注意:要开long long:比较的时候因为编号也占权重所以要比较pair:编号不是mid!不是mid!是初始输入的那个编号!搞混 ...
- python之处理json
import json# json串就是字符串dic={ 'car':{'color':'red','price':100,'count':50}, 'iphone':{'color':'骚粉色',' ...
- LightOj 1088 - Points in Segments (二分枚举)
题目链接: http://www.lightoj.com/volume_showproblem.php?problem=1088 题目描述: 给出一个n位数升序排列的数列,然后q个查询,每个查询问指定 ...
- stack(单调栈) POJ 2082 Terrible Sets
题目传送门 题意:紧贴x轴有一些挨着的矩形,给出每个矩形的长宽,问能组成的最大矩形面积为多少 分析:用堆栈来维护高度递增的矩形,遇到高度小的,弹出顶部矩形直到符合递增,顺便计算矩形面积,且将弹出的宽度 ...
- 1-3方法的重载(overload)
之前已经写了一个方法sumInt用来计算两个int类型数字的和,如果要是想计算两个float类型数字的和呢?ok,那就再来写一个sumFloat方法,除此之外,还有long类型,double类型,如果 ...
- Mybatis-Configuration-详解
Configuration MyBatis的初始化会执行SqlSessionFactoryBuilder的中build()方法,build方法又会调用XMLConfigBuilder()的内部pars ...
- solr facet查询及solrj 读取facet数据[转]
solr facet查询及solrj 读取facet数据 | 所属分类:solr facet solrj 一. Facet 简介 Facet 是 solr 的高级搜索功能之一 , 可以给用户提供更 ...
- 用户控件引用Entity Framework
背景: 今天在做软件的时候,出现了问题,我在项目里面添加了Entity Framework,在form的代码里引用没有问题,在userControl里引用就出了问题. 我检查app.config文件 ...
- 关于java的Long 类型到js丢失精度的问题
写代码碰到一个bug, 现象是 后台Java返回的18位的Long类型的数据,到前台丢失了精度. 查了一下,原因是 java的Long类型是18位, 而 js的Long类型(虽然没有明确定义的Lon ...
- Mac上面不能安装Homebrew
这个stackoverflow的答案解决了我的问题: http://stackoverflow.com/questions/18039029/mac-can-t-install-homebrew 问题 ...