powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Баг PreparedStatement
10 сообщений из 35, страница 2 из 2
Баг PreparedStatement
    #39408403
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraПредлагаю рассмотреть вариант batch-select
Так TC и батчит по тыще id за заход. :)
Прям как в статье.
...
Рейтинг: 0 / 0
Баг PreparedStatement
    #39408412
yw
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
yw
Гость
ivanra,

А чем обычная работа с коллекциями https://docs.oracle.com/database/121/JJDBC/oraarr.htm#JJDBC28574 не устраивает ?
(ну кроме того, что нужны права на создание типа)
...
Рейтинг: 0 / 0
Баг PreparedStatement
    #39408422
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yw(ну кроме того, что нужны права на создание типа)
Ну учитывая, что ODCIVarchar2List уже создан и 3000 в него залезает, это не вопрос.
Правда, возможно, придется повозится, чтоб объяснить оптимизатору сколько элементов в этом массиве. :)
...
Рейтинг: 0 / 0
Баг PreparedStatement
    #39408444
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
NordallСделано это для максимальной производительности. Можете возразить, что это работает медленее?

Да, это будет работать не быстрее точно.

NordallОчень рад, что вам разрешают создавать временные таблицы на продуктивном сервере с десятками проектами пользующимися данными по остаткам.

А что такого? Создавал временные таблицы в БД федерального оператора связи, и в банке хорошего уровня. Админы только за.
Более того, приходилось решать временной таблицей проблему именно перформанса- когда оптимизатор не мог связать три таблицы правильно - пришлось перед запросом сливать две из них в одну временную и гонять запросы по ней. Часа 2 экономилось при каждом (ежедневном) запуске, пока схему данных не поменяли ;)
...
Рейтинг: 0 / 0
Баг PreparedStatement
    #39408510
Nordall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Сергей АрсеньевNordallЗначение 1000 - это лимит для количества значений в in.
Ну почти.
Код: plsql
1.
(0,field) in ((0,1),(0,2),...(0,9999))


Хотя, тот еще вариант. :)
Передача через массив выглядит естественней (или через временную таблицу). Но скорее всего у Вас проблема с запросом, особенно если в нем куча вьюшек используется.
Нужно выяснить по трейсу что приходит и где ошибка.
А дальше уже решать. Либо материализовать в некотором слое либо что...
Трэйс наше все. Буду в этом направлении копать.
...
Рейтинг: 0 / 0
Баг PreparedStatement
    #39408527
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nordall,
вообще было бы интересно посмотреть на интерфейс, в котором пользователю предлагается выбрать 1000+ значений для запроса с in().

Ну и в копилку такое безумное решение средствами оракл без in():
Код: sql
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
with ids as (
  select ? as id from dual
  union
  select ? as id from dual
  union
  select ? as id from dual
  -- еще 100500 раз
)
select b.*
from acc_balance b
inner join ids on b.account_id=ids.id
...
Рейтинг: 0 / 0
Баг PreparedStatement
    #39408552
Nordall
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
ivanra,
разве я писал об интерфейсе?
...
Рейтинг: 0 / 0
Баг PreparedStatement
    #39408557
Сергей Арсеньев
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraНу и в копилку такое безумное решение средствами оракл без in():
ну in (или еще лучше exists) можно было бы и union all использовать. :)
...
Рейтинг: 0 / 0
Баг PreparedStatement
    #39408568
ivanra
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Nordall,
я не полностью сформулировал. Выбор 1000+ значений без возможности сохранения .
Если выбор на интерфейсе, и нет возможности выбор запомнить, то это беда. Если всё же сохраняется, то надо джойнить.
Ну а если это некий массив данных, то логично передать данные на сервер, и там обработать.
Но вот так, 1000 значений в in(), да еще с PreparedStatement? Выглядит не очень. Налицо неправильная постановка задачи, либо признаки copy-paste-style программирования
...
Рейтинг: 0 / 0
Баг PreparedStatement
    #39408570
Alexey Tomin
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ivanraвообще было бы интересно посмотреть на интерфейс, в котором пользователю предлагается выбрать 1000+ значений для запроса с in().

Интерфейс. Иногда такие перлы встречаются...
У меня знакомый работал в IT-отделе, где поставили некоторую программу, которая должна была выводить (в некоторый момент) список всех необработанных документов за этот год.
Делалось это так- вне БД лежал список ID обработанных файлов, и в SQL-запрос вставлялся "not in(...) and not in(...) and not in (...)" (да, три раза). И этот список вставлялся в переменные. Понятно, что за год обработать более 3000 документов было невозможно. По мнению авторов. А офисные работники смогли. И ему надо было как-то это поделие заставить работать. Кажется, "лшние" документы перенесли в какую-то архивную таблицу (соответственно их поиск не находил).
Так что бывает всякое. А потом "баги"
...
Рейтинг: 0 / 0
10 сообщений из 35, страница 2 из 2
Форумы / Java [игнор отключен] [закрыт для гостей] / Баг PreparedStatement
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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