Иммиграция под микроскопом
Летопись о канадской жизни простой русскоязычной семьи

13 августа 2011

Всё гениальное просто!

Сразу-же прошу прощенья у не-программистов - этот постинг будет интересен только моим братьям и сёстрам по цеху...


Как известно, в оракловском SQL-е список значений для IN не может превышать тыщу, иначе выскочит ошибка "ORA-01795: Maximum number of expressions in a list is 1000". А я сейчас как раз пишу функцию на стороне клиента (на PowerBuilder-е), которая будет строить этот самый IN clause динамицки (не будем обсуждать насколько приемлем сам такой подход - меня заставили!) и заранее известно, что к-во элементов может превышать тыщу (функция будет универсальная, для фреймворка, а не для конкретного случая). Ну, мне стало интересно какие в интернете есть решения кроме тупого, сразу приходящего на ум разделения на несколько предложений IN, соединённых OR-ами. Ничего интересного не нашёл (вариант с temporary table не подходит из-за архитектуры системы), но решение, предложенное на одном из сайтов, потрясло своей простотой и, так сказать, новизной подхода - мой зашоренный мозг никогда бы до такого не догадался. Итак, зайдя на http://ora-01795.ora-code.com/ я с изумлением прочитал решение проблемы:


Action: Remove some of the expressions from the list.


То есть если число элементов превышает тыщу, надо просто убрать некоторые из них, и - о, чудо! - их станет меньше тыщи, что заставит коварный эррор ORA-01795 усмирить гнев и вернуться в свою засаду для поджидания другой жертвы. И ведь главное - чисто формально это решение работает, так что возразить нечего!



<< ...ПРОШЛОЕ БУДУЩЕЕ... >>


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



На главную страницу