微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

Oracle19c:选择查询失败,使用 where 子句超过 19720 个逻辑条件

如何解决Oracle19c:选择查询失败,使用 where 子句超过 19720 个逻辑条件

我正在使用以下环境:

  1. 甲骨文 19.0.0.0
  2. Windows 10
  3. ojdbc8.jar

在 DBeaver on: workflow_run: workflows: ["Other Workflow Name"] types: [completed] #requested jobs: on-success: runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'success' }} steps: - run: echo "First workflow was a success" on-failure: runs-on: ubuntu-latest if: ${{ github.event.workflow_run.conclusion == 'failure' }} steps: - run: echo "First workflow was a failure" sql 客户端(内部使用 odjbc8.jar 驱动程序)中使用 Oracle19c 作为数据库,我在其中执行 sql 查询

https://dbeaver.io/

以上查询失败,出现以下异常:

select * from Student
  WHERE RollNo=1 OR RollNo=2 OR RollNo=3 OR RollNo=4 OR .... OR RollNo=19720 

你能帮我吗?

  1. oracle19c 中的逻辑运算符有一些限制吗?
  2. 或者我必须做一些设置(数据库级设置)来处理这个查询(我知道将查询更改为 IN 子句可以解决我的问题)。

提前致谢。

解决方法

1. oracle19c中的逻辑运算符有一些限制吗?

不,但 "Logical Database Limits" 声明:

注意:

SQL 语句的长度限制取决于很多因素,包括数据库配置、磁盘空间和内存

2.或者我必须做一些设置(数据库级设置)来处理这个查询(我知道将查询更改为 IN 子句可以解决我的问题)。

即使某些更改(如增加内存等)可以增加您的 OR 数量,但它仍然不是可靠的解决方案。所以最好使用集合(或全局临时表,以防 JPPD(连接谓词下推)出现问题)。

顺便说一句,简单的 IN 条件 (x in (1,2,3...1000)) 有 1000 个表达式的限制 (ORA-01795:列表中的最大表达式数为 1000),但您可以使用元组 (0,x) in ((0,1),(0,2),3)...(0,1000),...(0,10000))

,

看起来您可以使用 BETWEEN 子句:

select * from Student
  WHERE RollNo BETWEEN 1 AND 19720

或使用等效的 >= / <= 对:

select * from Student
  WHERE RollNo >= 1 AND
        RollNo <= 19720

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。