更多一个奇怪的问题..学习SQL并且我想知道AND子句的最大数量是什么:
WHERE condition1
AND condition2
AND condition3
AND condition4
...
AND condition?
...
AND condition_n;
即什么是最大的n
?看来,由于这些可能是微不足道的比较,因此限制很高。
在达到限制之前可以走多远?
答案 0 :(得分:5)
实际上,没有限制。
大多数工具对它们可以处理的SQL语句的长度有一些限制。但是,如果您想深入了解杂草,可以使用dbms_sql
包,该包接受包含单个SQL语句的varchar2(4000)
集合。那会让你达到2 ^ 32 * 4000字节。如果我们假设每个条件至少为10个字节,则合理的上限为400 * 2 ^ 32,大约为800亿个条件。如果你接近那个,那你就做错了。在此之前,大多数工具都有限制。
当然,如果您使用dbms_sql
创建了最大可能的SQL语句,那么该SQL语句将需要大约16万亿字节。需要16 TB存储空间的单个SQL语句可能会产生其他问题...
答案 1 :(得分:3)
我把一个简单的测试用例放在一起:
select * from dual
where 1=1
and 1=1
...
使用SQL * Plus,我能够运行100,000条件(不可否认,非常简单),没有问题。我发现任何一个甚至接近这个数字的用例都非常可疑......
答案 2 :(得分:2)
不确定是什么原因我不认为即使在Oracle规范中他们已经定义了它,但在很少因素上这将是确定的。
查询的长度。在少数Oracle社区/论坛帖子中,我已经读过oracle 9i
中{1}} SQL语句的最大长度为64k,但在更高版本中,未指定该限制,而是指定depends on disk space, memory availability etc
。< / p>
同样,在几个Oracle论坛中我已经读过,Oracle在INLIST中支持1000个元素(IN (a1,a2,...,a1000)
)。因此它会转换为OR
之类的a1 OR a2 Or ... OR a1000
条件。有了它,我的理解是,如果它支持1000 OR
条件;它也能够处理相同数量的AND
条件。
但最终,我认为没有任何记录的限制/上限存在。