каков верхний предел для предиката WHERE IN() db2?

каков верхний предел для предиката WHERE IN в DB2.

Например:

выберите зарплату у сотрудника, где empid в (1,2,3,4...N)


person user3492304    schedule 01.09.2014    source источник
comment
Насколько я знаю, оператор SQL в DB2 (LUW) может занимать до 2 МБ, поэтому в принципе вы можете иметь где-то около 250 тысяч терминов в предложении IN, допуская 8 символов на термин, включая запятую. OTOH, вы действительно не должны использовать это в своих интересах.   -  person Jonathan Leffler    schedule 01.09.2014
comment
Кроме того, потребуется определение upper limit, если возможен какой-либо ответ. Если это означает максимальное количество значений, ответ может отличаться от максимальной длины предиката. У вас может быть тысяча значений CHAR(3) в один раз и сотня значений CHAR(30) в другой раз, и вы получите разные результаты.   -  person user2338816    schedule 05.09.2014


Ответы (4)


Ограничение AS/400 составляет около 1000, исходя из ошибок, которые мы получаем, когда превышаем это значение. Мы разбиваем запросы на несколько небольших запросов, чтобы исправить наше устаревшее приложение JEE.

person nclark    schedule 08.07.2016

Иногда, если вам нужно задать вопрос, вы, вероятно, делаете это неправильно :-)

Если вас беспокоит ограничение, подумайте о том, чтобы поместить значения во временную таблицу, а затем просто соединить таблицы, чтобы получить результат.

Что касается конкретных ограничений, то они почти наверняка будут зависеть от того, какую DB2 вы используете: LUW, z/OS, iSeries и т. д. Он также может различаться в зависимости от версии. Я видел в сети вопросы о том, что DB2 отклоняет более тысячи записей, но что касается платформы/версии, я не могу сказать.

Лучше всего просто протестировать любую версию, которую вы используете, чтобы увидеть, когда вы достигнете предела. IBM, как правило, не стремится публиковать подобные ограничения, полагая вместо этого, что вы сделаете разумную вещь и избежите слишком многих (не в последнюю очередь потому, что для механизма оптимизации почти невозможно выбрать достойный путь выполнения для произвольных значений).

person paxdiablo    schedule 01.09.2014
comment
Без тегов из группы Oracle. - person user3492304; 01.09.2014
comment
Я просто хотел узнать максимальное ограничение для предиката IN в DB2. Меня не интересуют возможные решения, такие как временная таблица и т. д., потому что мы уже подумали обо всех этих альтернативах :) - person user3492304; 01.09.2014
comment
@user3492304: user3492304: тогда первое вам нужно указать, какая платформа и какая версия. Затем перейдите на сайт документации IBM и возьмите соответствующий PDF-файл. Если этого там нет, IBM не говорит. Как человек, работавший в Software Group, я знаю, что IBM не устанавливает ограничений без крайней необходимости — в противном случае это ограничивает их свободу действий. Если они опубликуют это, я съем свой обед :-) - person paxdiablo; 01.09.2014

Для z/OS IBM устанавливает следующие ограничения, но нет никаких указаний относительно предложения IN:

https://www.ibm.com/support/knowledgecenter/SSEPEK_11.0.0/com.ibm.db2z11.doc.sqlref/src/tpc/db2z_limits.dita

person JRA_TLL    schedule 06.05.2016

Используйте оператор соединения, когда достигаются пределы предложения in. Это не имеет предела для всех намерений и целей.

select salary from employee join mytable on empid = id.
person danny117    schedule 08.07.2016
comment
Это лучший подход для самостоятельно созданного уровня DA, но он не применяется к системам, которым вы не предоставили права на запись. В моем случае я не могу создать новую таблицу или вставить данные, я пользователь только для чтения - person Phate01; 16.04.2019