同一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语句的批处理脚 ...
随机推荐
- hdoj1495简单BFS
#include <stdio.h> #include <string.h> #include <math.h> #include <algorithm> ...
- python __builtins__ classmethod类 (11)
11.'classmethod', 修饰符对应的函数不需要实例化,不需要 self 参数,但第一个参数需要是表示自身类的 cls 参数,可以来调用类的属性,类的方法,实例化对象等. class cla ...
- git 命令参考手册
你的本地仓库由 git 维护的三棵“树”组成.第一个是你的 工作目录,它持有实际文件:第二个是 缓存区(Index),它像个缓存区域,临时保存你的改动:最后是 HEAD,指向你最近一次提交后的结果. ...
- LeetCode.896-单调数组(Monotonic Array)
这是悦乐书的第345次更新,第369篇原创 01 看题和准备 今天介绍的是LeetCode算法题中Easy级别的第210题(顺位题号是896).如果数组单调递增或单调递减,则数组是单调的.如果对于所有 ...
- Luogu P1607 庙会班车【线段树】By cellur925
题目传送门 据说可以用贪心做?算了算了...我都不会贪.... 开始想的是用线段树,先建出一颗空树,然后输进区间操作后就维护最大值,显然开始我忽视了班车的容量以及可以有多组奶牛坐在一起的信息. 我们肯 ...
- NOIp2005 过河【dp+离散化】By cellur925
题目传送门 $30pts$ 状态和转移都比较好想:设$f[i]$表示跳到$i$位置,踩到的最小石子数.转移方程也很明了,为$f[i]$=$min${$f[i-j]$),,这个位置有石子时答案再加1,$ ...
- iOS 让部分ViewController支持屏幕旋转
首先,在Xcode里设置整个项目支持的屏幕显示方向: 然后创建一个UINavigationController的子类,然后重载以下属性: 对于需要自定义屏幕方向的ViewController,重载这个 ...
- logrotate日志转储
1 工具目录 ***系统开启selinux,logrotate会不生效*** linux默认会安装logrotate工具,自身的boot.log就是通过它分割转储的. [root@webmaster ...
- nginx命令介绍
[root@webmaster nginx]# ./sbin/nginx -h nginx version: nginx/1.12.2 Usage: nginx [-?hvVtTq] [-s sign ...
- C语言-------指针函数与函数指针的区别
一. 在学习arm过程中发现这“指针函数”与“函数指针”容易搞错,所以今天,我自己想一次把它搞清楚,找了一些资料,首先它们之间的定义: 1.指针函数是指带指针的函数,即本质是一个函数.函数返回类型是某 ...