`

oracle的or操作符使用错误

阅读更多

工作中,发现一处数据计算结果异常,检查原始数据,没有发现问题,再手工计算,和系统计算结果一比,吓一跳:竟然大出了很多倍,于是,开始检查程序,发现有如下调用:
  select tt.BC1610
  from TJ_V_PFI_BC1610_BC1620 tt
  where to_char(tt.tj_date, 'yyyymm') = '200811'
  and tt.regionid = 999
  or tt.regionid in (select b.regionid
  from tj_performance_region_sub b
  where b.type = 0
  and b.parentregionid = 999)
  取出执行发现,结果确实异常,检查分析后发现,竟然是 where 条件的问题,是在条件中用到了 or 操作符,由于粗心的原因,没有注意到它们的关系,引起结果的异常,改成如下所示的SQL,测试正常:
  select nvl(sum(tt.BC1610), 0)
  from TJ_V_PFI_BC1610_BC1620 tt
  where to_char(tt.tj_date, 'yyyymm') = '200811'
  and (tt.regionid = 999
  or tt.regionid in (select b.regionid
  from tj_performance_region_sub b
  where b.type = 0
  and b.parentregionid = 999));
  唯一的区别是,第一句没有将两个 OR 条件括起来。
  工作中,用到 OR 的地方特别多,如果OR和其它的条件是并列的话,一定要注意OR的应用。

分享到:
评论

相关推荐

    ora-01033:oracle initialization or shutdown in progress 解决方法

    ### ora-01033: Oracle Initialization or Shutdown in Progress 解决方法 #### 一、问题背景及原因 **标题**: “ora-01033: Oracle initialization or shutdown in progress 解决方法” **描述**: “ora-01033: ...

    最完整的Toad For Oracle使用手册

    ### Toad for Oracle 使用手册关键知识点总结 #### 一、简介与新特性 - **Toad for Oracle**:是一款强大的数据库开发与管理工具,适用于Oracle数据库环境。 - **新版本特性**:概述了Toad for Oracle最新版本的...

    Oracle优化全攻略一【Oracle 索引概念】.docx

    在这种情况下,可以尝试将不等于操作符转换为OR条件,以利用索引。同样,IS NULL或IS NOT NULL的使用也可能限制索引,除非使用的是位图索引。此外,函数的使用若不与基于函数的索引配合,也会导致索引被忽略。最后,...

    ORACLE高效SQL书写规范

    这是因为OR操作符会使得ORACLE无法确定使用哪个索引来优化查询。 **2-2、WHERE子句中尽量不用LIKE‘%c%’** 使用模式匹配操作符`LIKE`时,如果模式以通配符`%`开头,则可能无法利用索引。 **2-3、WHERE子句中尽量...

    oracle大学考试试题

    - **逻辑操作符**:AND、OR、NOT - **集合操作符**:UNION、INTERSECT、MINUS - **通配符**:LIKE、BETWEEN、IN、IS NULL #### SQL查询实例分析 - **示例1**:查询某个学生的所有选课信息及其成绩。 - **SQL**...

    oracle通过sql实现字符串转数字oracle函数

    为了解决这个问题,可以使用`TRY_TO_NUMBER()`函数(Oracle 12c及以上版本),它在转换失败时返回NULL而不是引发错误: ```sql SELECT TRY_TO_NUMBER(str_column) AS num_column FROM your_table; ``` 有时,字符...

    oracle登录错误

    ### Oracle登录错误(ORA-01033: ORACLE initialization or shutdown in progress) #### 错误概述 在处理Oracle数据库时,可能会遇到ORA-01033错误:“ORA-01033: ORACLE initialization or shutdown in progress”...

    Oracle 数据导入工具

    在使用SQL*Loader时,我们需要创建一个控制文件,该文件描述了数据文件的结构,包括字段的分隔符、数据类型、长度等信息。例如,如果我们有一个CSV文件,控制文件可能包含如何处理逗号分隔的数据的指令。 在实际...

    Windows环境中Kill掉Oracle线程

    Orakill 的使用方法如下:在 Dos 提示符下,输入“orakill sid thread”,其中 sid 是 Oracle 的 Sid 号,thread 是 Oracle 的线程 id 号。在 Sql*plus 工具里面可以查询到 Oracle 的线程号。 例如,可以使用以下 ...

    Oracle数据库经典学习教程

    操作符 - **逻辑运算符**:如AND、OR、NOT等。 - **比较运算符**:如=、!=、>、<等。 ##### 6. 高级查询 - **子查询**:在一个SELECT语句中嵌套另一个SELECT语句。 - **连接查询**:JOIN操作用于从两个或多个表中...

    oracle数据库考试复习题

    6. **单行查询操作符**:`=`, `IN`, `LIKE`, `BETWEEN`都是常见的单行查询操作符,用于比较和筛选数据。 7. **事务操作**:`GRANT`、`UPDATE`和`SELECT`操作默认会隐式提交,而`ROLLBACK`用于回滚事务,不会提交。 ...

    Oracle PLSQL开发基础

    包括算术操作符(+、-、*、/、MOD)、比较操作符(=、<、>、、>=、)、逻辑操作符(AND、OR、NOT)和位操作符(BITAND、BITOR、SHIFT operators)等,用于计算和条件判断。 1.5 PL/SQL 流程控制 包括IF-THEN-ELSIF-...

    Oracle考试必备知识

    5. **集合操作符**: - `UNION`:返回两个查询结果集的并集,并自动去重。 - `UNION ALL`:返回两个查询结果集的并集,不自动去重。 - `INTERSECT`:返回两个查询结果集的交集。 - `MINUS`:返回第一个查询结果...

    Oracle 授权 ORA-00990: 权限缺失或无效

    `Ora 10G SQL Reference.chm`是Oracle 10g的SQL参考手册,其中包含了详细的SQL语法、函数、操作符和数据库管理命令。当遇到权限问题时,可以查阅此手册获取关于`GRANT`、`REVOKE`、`ALTER USER`和`SET ROLE`等命令...

    PL_SQL_Oracle_Or_Jdbc.pdf

    以上内容涵盖了《PL_SQL_Oracle_Or_Jdbc.pdf》文档中的主要知识点,这些知识点对于理解Oracle数据库的操作以及如何使用JDBC进行交互至关重要。希望本文能够帮助读者更好地理解和掌握这些技术细节。

    Oracle Sql基础 Oracle Sql基础 Oracle Sql基础

    - 多行子查询返回多个值,可以使用IN、ANY/SOME、ALL等操作符与之配合使用。 #### 七、操纵数据 **7.1 学习目的** - 本章主要讲解如何使用数据操纵语言(DML)来进行数据的插入、更新和删除等操作。 **7.2 数据...

    oracle存储过程详解-开发技术

    - `:=`:赋值操作符。 ##### 6. 使用 FOR IN 循环遍历游标 ```sql DECLARE CURSOR cur IS SELECT * FROM 表名; BEGIN FOR cur_result IN cur LOOP -- 处理每一行数据 END LOOP; END; ``` - `CURSOR`:定义...

Global site tag (gtag.js) - Google Analytics