|
|
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
ivanraПредлагаю рассмотреть вариант batch-select Так TC и батчит по тыще id за заход. :) Прям как в статье. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 11:55 |
|
||
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
ivanra, А чем обычная работа с коллекциями https://docs.oracle.com/database/121/JJDBC/oraarr.htm#JJDBC28574 не устраивает ? (ну кроме того, что нужны права на создание типа) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 12:08 |
|
||
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
yw(ну кроме того, что нужны права на создание типа) Ну учитывая, что ODCIVarchar2List уже создан и 3000 в него залезает, это не вопрос. Правда, возможно, придется повозится, чтоб объяснить оптимизатору сколько элементов в этом массиве. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 12:17 |
|
||
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
NordallСделано это для максимальной производительности. Можете возразить, что это работает медленее? Да, это будет работать не быстрее точно. NordallОчень рад, что вам разрешают создавать временные таблицы на продуктивном сервере с десятками проектами пользующимися данными по остаткам. А что такого? Создавал временные таблицы в БД федерального оператора связи, и в банке хорошего уровня. Админы только за. Более того, приходилось решать временной таблицей проблему именно перформанса- когда оптимизатор не мог связать три таблицы правильно - пришлось перед запросом сливать две из них в одну временную и гонять запросы по ней. Часа 2 экономилось при каждом (ежедневном) запуске, пока схему данных не поменяли ;) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 13:04 |
|
||
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
Сергей АрсеньевNordallЗначение 1000 - это лимит для количества значений в in. Ну почти. Код: plsql 1. Хотя, тот еще вариант. :) Передача через массив выглядит естественней (или через временную таблицу). Но скорее всего у Вас проблема с запросом, особенно если в нем куча вьюшек используется. Нужно выяснить по трейсу что приходит и где ошибка. А дальше уже решать. Либо материализовать в некотором слое либо что... Трэйс наше все. Буду в этом направлении копать. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 14:33 |
|
||
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
Nordall, вообще было бы интересно посмотреть на интерфейс, в котором пользователю предлагается выбрать 1000+ значений для запроса с in(). Ну и в копилку такое безумное решение средствами оракл без in(): Код: sql 1. 2. 3. 4. 5. 6. 7. 8. 9. 10. 11. ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 15:00 |
|
||
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
ivanra, разве я писал об интерфейсе? ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 15:15 |
|
||
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
ivanraНу и в копилку такое безумное решение средствами оракл без in(): ну in (или еще лучше exists) можно было бы и union all использовать. :) ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 15:20 |
|
||
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
Nordall, я не полностью сформулировал. Выбор 1000+ значений без возможности сохранения . Если выбор на интерфейсе, и нет возможности выбор запомнить, то это беда. Если всё же сохраняется, то надо джойнить. Ну а если это некий массив данных, то логично передать данные на сервер, и там обработать. Но вот так, 1000 значений в in(), да еще с PreparedStatement? Выглядит не очень. Налицо неправильная постановка задачи, либо признаки copy-paste-style программирования ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 15:37 |
|
||
|
Баг PreparedStatement
|
|||
|---|---|---|---|
|
#18+
ivanraвообще было бы интересно посмотреть на интерфейс, в котором пользователю предлагается выбрать 1000+ значений для запроса с in(). Интерфейс. Иногда такие перлы встречаются... У меня знакомый работал в IT-отделе, где поставили некоторую программу, которая должна была выводить (в некоторый момент) список всех необработанных документов за этот год. Делалось это так- вне БД лежал список ID обработанных файлов, и в SQL-запрос вставлялся "not in(...) and not in(...) and not in (...)" (да, три раза). И этот список вставлялся в переменные. Понятно, что за год обработать более 3000 документов было невозможно. По мнению авторов. А офисные работники смогли. И ему надо было как-то это поделие заставить работать. Кажется, "лшние" документы перенесли в какую-то архивную таблицу (соответственно их поиск не находил). Так что бывает всякое. А потом "баги" ... |
|||
|
:
Нравится:
Не нравится:
|
|||
| 21.02.2017, 15:38 |
|
||
|
|

start [/forum/topic.php?fid=59&msg=39408568&tid=2123124]: |
0ms |
get settings: |
11ms |
get forum list: |
20ms |
check forum access: |
5ms |
check topic access: |
5ms |
track hit: |
97ms |
get topic data: |
13ms |
get forum data: |
3ms |
get page messages: |
65ms |
get tp. blocked users: |
2ms |
| others: | 238ms |
| total: | 459ms |

| 0 / 0 |
