sql >> Base de Datos >  >> RDS >> Oracle

¿Por qué la cláusula IN de Oracle tiene un límite de 1000 solo para datos estáticos?

Es una restricción en cualquier lista de expresiones:

Una lista de expresiones delimitadas por comas no puede contener más de 1000 expresiones.

¿Por qué 1000? Presumiblemente, la implementación necesita algún tipo de límite, y eso probablemente parecía más que suficiente. Bien puede haber, o ciertamente puede haber habido cuando se estableció ese límite hace décadas, una razón de rendimiento para el límite también, particularmente como el IN se convierte en múltiples OR declaraciones del optimizador en este caso (que puedes ver si miras el plan de ejecución).

Me costaría encontrar un escenario razonable que necesitara acercarse a eso, con valores fijos que de todos modos no podrían derivarse de otros datos como una subconsulta.

Sospecho que está algo relacionado con los límites lógicos de la base de datos que dicen que no puede tener más de 1000 columnas en una tabla, por ejemplo; dado que una lista de expresiones se usa en una declaración de inserción para enumerar las columnas y los valores que se insertan, la lista de expresiones debe poder coincidir con eso, pero tal vez no tenga motivos para excederlo.

La especulación, por supuesto... sin ver las partes internas del software, es poco probable que obtenga una respuesta definitiva.