在Oracle SQL中,查询中AND子句的最大数量是多少?

时间:2014-06-10 18:56:34

标签: sql oracle oracle11g boundary

更多一个奇怪的问题..学习SQL并且我想知道AND子句的最大数量是什么:

WHERE condition1
AND condition2
AND condition3
AND condition4
...
AND condition?
...
AND condition_n;

即什么是最大的n?看来,由于这些可能是微不足道的比较,因此限制很高。 在达到限制之前可以走多远?

src

3 个答案:

答案 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规范中他们已经定义了它,但在很少因素上这将是确定的。

  1. 查询的长度。在少数Oracle社区/论坛帖子中,我已经读过oracle 9i中{1}} SQL语句的最大长度为64k,但在更高版本中,未指定该限制,而是指定depends on disk space, memory availability etc。< / p>

  2. 同样,在几个Oracle论坛中我已经读过,Oracle在INLIST中支持1000个元素(IN (a1,a2,...,a1000))。因此它会转换为OR之类的a1 OR a2 Or ... OR a1000条件。有了它,我的理解是,如果它支持1000 OR条件;它也能够处理相同数量的AND条件。

  3. 但最终,我认为没有任何记录的限制/上限存在。

相关问题