为什么oracle IN子句仅对静态数据有1000的限制?

Viv*_*wal 6 oracle oracle10g oracle11g

Oracle IN子句对静态数据的限制为1000,但它接受来自子查询的无限数据.为什么?

Ale*_*ole 8

这是对任何表达式列表的限制:

逗号分隔的表达式列表可以包含不超过1000个表达式.

为什么1000?据推测,实现需要某种限制,这似乎绰绰有余.在几十年前设定该限制时,可能存在,或者肯定可能是限制的性能原因,特别INOR在这种情况下由优化器转换为多个语句(如果你看一下,你可以看到)执行计划).

我很难想出一个合理的场景,需要靠近它,固定值无法从其他数据中作为子查询得出.

我怀疑它与逻辑数据库限制有些相关,例如,表示表中的列不能超过1000列; 由于在insert语句中使用表达式列表来列出要插入的列和值,因此表达式列表必须能够匹配,但可能没有理由超过它.

当然猜测......如果没有看到软件的内部结构,你就不可能获得明确的答案.