两条SQL语句分别在上线系统与测试系统中执行,一条在上线中通过测试通不过,一条在上线中通不过测试中通过
来源:互联网 发布:淘宝用什么框架写的 编辑:程序博客网 时间:2024/05/06 03:31
两条SQL语句分别在上线系统与测试系统中执行,一条在上线中通过测试通不过,一条在上线中通不过测试中通过
今天,在测试系统中有发现一条SQL语句无法执行,而上线系统中却没见有用户反映有问题,于是将测试系统中的语句修改了一下,并测试通过,然后导入上线系统,然而,问题来了,有用户反映系统出错,一查,发现是那条改过的语句,拿到测试系统一试可以通过而上线系统却通不过。见下面的过程,由此可见,Oracle对SQL语句的Where条件解析顺序应该不是固定的。
出现这样的问题,需要研究一下它到底与什么有关,以避免出现在不同数据库中的表现不同。
SQL> connect itedev@eimslive.world
输入口令:
已连接。
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.2.0 - 64bit Production
PL/SQL Release 9.2.0.2.0 - Production
CORE 9.2.0.2.0 Production
TNS for HPUX: Version 9.2.0.2.0 - Production
NLSRTL Version 9.2.0.2.0 - Production
SQL> DESC SOM.SOAD_DET;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
SOAD_NBR NOT NULL VARCHAR2(18)
SOAD_LINE NOT NULL NUMBER
SOAD_SO_LINE NUMBER
SOAD_TYPE CHAR(1)
SOAD_HOLD_DATE DATE
SOAD_OLD_VALUE VARCHAR2(50)
SOAD_NEW_VALUE VARCHAR2(50)
SOAD_RMKS VARCHAR2(200)
SOAD_QTY NUMBER
SQL> SELECT SOAD_NEW_VALUE,SOAD_OLD_VALUE
2 FROM SOM.SOAD_DET
3 WHERE SOAD_NBR = 'A4120000001'
4 AND SOAD_TYPE = 'G';
未选定行
SQL> SELECT COUNT(*)
2 FROM SOM.SOAD_DET
3 WHERE SOAD_NBR = 'A4120000001'
4 AND SOAD_TYPE = 'G'
5 AND TO_NUMBER(SOAD_NEW_VALUE) = 0;
AND TO_NUMBER(SOAD_NEW_VALUE) = 0
*
第 5 行出现错误:
ORA-01722: invalid number
SQL> SELECT COUNT(*)
2 FROM (SELECT SOAD_NEW_VALUE,SOAD_OLD_VALUE
3 FROM SOM.SOAD_DET
4 WHERE SOAD_NBR = 'A4120000001'
5 AND SOAD_TYPE = 'G')
6 WHERE TO_NUMBER(SOAD_NEW_VALUE) > TO_NUMBER(SOAD_OLD_VALUE);
COUNT(*)
----------
0
SQL>
SQL> connect itedev@eimstest.world
输入口令:
已连接。
SQL> select * from v$version;
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.2.0 - 64bit Production
PL/SQL Release 9.2.0.2.0 - Production
CORE 9.2.0.2.0 Production
TNS for HPUX: Version 9.2.0.2.0 - Production
NLSRTL Version 9.2.0.2.0 - Production
SQL> DESC SOM.SOAD_DET;
名称 是否为空? 类型
----------------------------------------- -------- ----------------------------
SOAD_NBR NOT NULL VARCHAR2(18)
SOAD_LINE NOT NULL NUMBER
SOAD_SO_LINE NUMBER
SOAD_TYPE CHAR(1)
SOAD_HOLD_DATE DATE
SOAD_OLD_VALUE VARCHAR2(50)
SOAD_NEW_VALUE VARCHAR2(50)
SOAD_RMKS VARCHAR2(200)
SOAD_QTY NUMBER
SQL> SELECT SOAD_NEW_VALUE,SOAD_OLD_VALUE
2 FROM SOM.SOAD_DET
3 WHERE SOAD_NBR = 'A4120000001'
4 AND SOAD_TYPE = 'G';
未选定行
SQL> SELECT COUNT(*)
2 FROM SOM.SOAD_DET
3 WHERE SOAD_NBR = 'A4120000001'
4 AND SOAD_TYPE = 'G'
5 AND TO_NUMBER(SOAD_NEW_VALUE) = 0;
COUNT(*)
----------
0
SQL> SELECT COUNT(*)
2 FROM (SELECT SOAD_NEW_VALUE,SOAD_OLD_VALUE
3 FROM SOM.SOAD_DET
4 WHERE SOAD_NBR = 'A4120000001'
5 AND SOAD_TYPE = 'G')
6 WHERE TO_NUMBER(SOAD_NEW_VALUE) > TO_NUMBER(SOAD_OLD_VALUE);
WHERE TO_NUMBER(SOAD_NEW_VALUE) > TO_NUMBER(SOAD_OLD_VALUE)
*
第 6 行出现错误:
ORA-01722: invalid number
SQL>
- 两条SQL语句分别在上线系统与测试系统中执行,一条在上线中通过测试通不过,一条在上线中通不过测试中通过
- MSN中英双语聊天机器人上线,邀请测试
- MSN中英双语聊天机器人上线,邀请测试
- MSN中英双语聊天机器人上线,邀请测试
- MSN中英双语聊天机器人上线,邀请测试
- MSN中英双语聊天机器人上线,邀请测试
- MSN中英双语聊天机器人上线,邀请测试
- MSN中英双语聊天机器人上线,邀请测试
- MSN中英双语聊天机器人上线,邀请测试
- MSN中英双语聊天机器人上线,邀请测试
- MSN中英双语聊天机器人上线,邀请测试
- 收费系统,在新窗口中强制下机,主窗口中的上线人数问题
- 在JMeter中执行测试
- phonegap用jsonp实现跨域,在浏览器测试中没有问题,不过到了Android的模拟器中没有反应。
- 在VC中使用ListCtrl保存上线主机SOCKET句柄
- 在VC中使用ListCtrl保存上线主机SOCKET句柄
- 在VC中使用ListCtrl保存上线主机SOCKET句柄
- 如何在apk中添加上线用户的信息
- 复制实参的局限性 为什么开源项目这么多参数用指针
- Windows下安装mysql-python(MySQLdb)问题记录
- 初学Android,图形图像之使用SurfaceView(三十九)
- gcc -fPIC选项
- 类中的静态变量
- 两条SQL语句分别在上线系统与测试系统中执行,一条在上线中通过测试通不过,一条在上线中通不过测试中通过
- 多线程的同步
- UIActionSheet最后一项失去点击效果的解决办法
- httpClient 教程
- TCP中的滑动窗口
- mysql编译安装
- SqlServer2008 SqlServer身份验证忘记登录名称
- 一个由于文件权限问题导致的SQL Server 2008 无法正常启动的问题
- The X Server Configuration HOWTO