作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
假设我必须针对单个更新语句检查 100,000 个 uid - 我的代码目前会将其分解为 1000-uid 块:
[...] WHERE UID IN (..., '998', '999', '1000')
OR UID IN ('1001', '1002', ...)
OR (..., etc., ...)
最佳答案
22.
嗯,不完全是。这就是 1000 项 IN 列表的 OR 子句将在我的系统上运行的数量,但这个数字可能因人而异。有
否 database limit这恰好涵盖了这种情况。它可能属于注释:
The limit on how long a SQL statement can be depends on many factors, including database configuration, disk space, and memory
ERROR at line 1:
ORA-03113: end-of-file on communication channel
Process ID: 2452
Session ID: 135 Serial number: 165
*** 2013-11-04 21:59:48.667
minact-scn master-status: grec-scn:0x0000.00821c54 gmin-scn:0x0000.0081d656 gcalc-scn:0x0000.00821c54
minact-scn master-status: grec-scn:0x0000.00823b45 gmin-scn:0x0000.0081d656 gcalc-scn:0x0000.00823b46
--Find the maximum number of IN conditions with 1000 items.
--Change the first number until it throws an error.
--This code uses dynamic SQL, but I found that static SQL has the same limit.
declare
c_number_of_ors number := 22;
v_in_sql varchar2(4000);
v_sql clob;
v_count number;
begin
--Comma-separate list of 1000 numbers.
select listagg(level, ',') within group (order by 1)
into v_in_sql
from dual connect by level <= 1000;
--Start the statement.
v_sql := 'select count(*) from dual ';
v_sql := v_sql || 'where 1 in ('||v_in_sql||')';
--Append more ORs to it.
for i in 1 .. c_number_of_ors loop
v_sql := v_sql || ' or '||to_char(i)||' in ('||v_in_sql||')';
end loop;
--Execute it.
execute immediate v_sql into v_count;
end;
/
关于sql - 单个 Oracle 语句中 OR 子句的最大数量是多少?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19777853/
我是一名优秀的程序员,十分优秀!