powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как помещать более 1000 значений в оператор IN?
20 сообщений из 20, страница 1 из 1
Как помещать более 1000 значений в оператор IN?
    #39698173
Festani_10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Столкнулся с проблемой что нужно поместить в данный оператор более 1000 значений, есть ли способ обойти это ограничение?
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698174
Вячеслав Любомудров
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
where (a, 1) in ((1, 1), (2, 1),...(1000,1))
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698176
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Festani_10,

Через OR
Через временную таблицу еще делают
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698200
IMNO
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Можно через коллекцию.
Оператор MEMBER OF .

Только тип коллекции должен быть объявлен на уровне схемы.

Код: plsql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
DECLARE 
  /*
    t_table_int - тип коллекции, объявленный на уровне схемы
    TYPE t_table_int  IS TABLE OF NUMBER(10);
  */
  r_digits t_table_int := t_table_int();
  v_cursor SYS_REFCURSOR;
BEGIN
  r_digits.EXTEND(1000);
  
  FOR i IN 1..1000
  LOOP
    r_digits(i) := i;
  END LOOP;
  
  OPEN :v_cursor FOR
    SELECT 1
    FROM YOURS_TABLE
    WHERE column MEMBER OF r_digits;
END;
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698207
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
да, слушай больше про коллекции. чтобы оптимизитор не оценил кардинальность, не заюзал индексы и прочее. но как показывает мой опыт если в in надо передать более 1000 это либо проблемы с днк, либо с архитектурой.
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698237
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtock,

А вот тут поддержу, даже при том что у нас разработчики используют временные таблицы (куда заранее отбирают данные), оптимизатор не может оценить их кардинальность.
Возможно просто запросом было бы лучше.
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698239
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtockно как показывает мой опыт если в in надо передать более 1000 это либо проблемы с днк, либо с архитектурой.Где находится то граничное число, начиная с которого можно говорить о проблемах с ДНК или архитектурой? И как все-таки отличить первое от второго?
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698243
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

Пример приведу. В одной таблице и продукты и партии. Партий на миллионы.
Продуктов на 150 тысяч, но отбирают их с завязкой на производителя IN (...)

Когда производителей в IN достаточно начинается FULL_SCAN всей таблицы товаров (вместе с партиями).
Благо у нас скорости хорошие.
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698250
Фотография AmKad
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
nata44845Продуктов на 150 тысяч, но отбирают их с завязкой на производителя IN (...)Ну так я могу подгадать случаи, когда и для одного значения FTS будет, или наоборот, для двух тысяч значений - index range scan.

Граничная чиселка, чиселка-то где?
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698251
nata44845
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
AmKad,

"Чиселка" в том, что разработчик зачем-то пихнул в одну таблицу разные данные - косяк в архитектуре.
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698275
Festani_10
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Все довольно просто есть справочник в котором более 1000 значений.
и на репортинг надо выбрать в фильтре все значения, выбирается через оператор IN из определенного поля этого справочника. выдает ошибку т.к. в переменную передается более 1000 значений.

AmKadnata44845Продуктов на 150 тысяч, но отбирают их с завязкой на производителя IN (...)Ну так я могу подгадать случаи, когда и для одного значения FTS будет, или наоборот, для двух тысяч значений - index range scan.

Граничная чиселка, чиселка-то где?
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698281
merch
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Festani_10, эта проблема известна всем давно. Добавь union all-ом кастом значение "Выбрать все" и обрабатывай уже его.
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698292
Фотография Stax
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Festani_10Все довольно просто


21664984

.....
stax
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698749
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
В целом я наблюдаю весьма часто в нашем приложении, когда разработчики среднего слоя складывают по 2, 3 тысячи айдишников в IN и начинают недоумевать вместо того, чтоб либо сложить их во временную таблицу и это реально получается быстрее либо просто подумать и передать не айдишники, а, например, код группы, которая включает в себя эти айдишники.
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698754
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Shtockвременную таблицуА если мультизвенка с пулом?
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698784
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Festani_10Все довольно просто есть справочник в котором более 1000 значений.
и на репортинг надо выбрать в фильтре все значения, выбирается через оператор IN из определенного поля этого справочника. выдает ошибку т.к. в переменную передается более 1000 значений.

Почему нельзя сделать in (select ... from справочник where условие для справочника сформированное фильтром в приложении) ?
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698786
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
SkilledJuniorFestani_10Все довольно просто есть справочник в котором более 1000 значений.
и на репортинг надо выбрать в фильтре все значения, выбирается через оператор IN из определенного поля этого справочника. выдает ошибку т.к. в переменную передается более 1000 значений.

Почему нельзя сделать in (select ... from справочник where условие для справочника сформированное фильтром в приложении) ? IN и есть фильтр.
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698787
SkilledJunior
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Пользователь тыкает мышкой более тысячи галочек?

Может посчитать в приложении сколько значений пойдет в условие in и сколько в not in, например пользователь выбрал все, значит in вообще ненужен просто выбирается весь справочник, если пользователь выбрал все, а потом снял выбор с нескольких значений то можно использовать not in, в общем можно как то творчески подойти к формированию условия и ограничению фильтра.
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39698788
Фотография Relic Hunter
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Там еще и на грабли с максимальной длинной оператора можно наступить, 3 МБ кажется.
...
Рейтинг: 0 / 0
Как помещать более 1000 значений в оператор IN?
    #39699126
Фотография Shtock
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Relic Hunter А если мультизвенка с пулом?


именно она, но как раз таки когда у нас такие ситуации это всё происходит в рамках одной транзакции, так что в этот момент коннект к БД держится и проблемы нет.
...
Рейтинг: 0 / 0
20 сообщений из 20, страница 1 из 1
Форумы / Oracle [игнор отключен] [закрыт для гостей] / Как помещать более 1000 значений в оператор IN?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]