问题描述
我正在使用以下环境:
- 甲骨文 19.0.0.0
- Windows 10
- 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中的逻辑运算符有一些限制吗?
不,但 "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