Oracle 10g.Обрезка разделов Oracle с помощью NLS_COMP = Лингвистическая
У нас есть большой стол, разделенный столбцом varchar2 (если бы это было связано со мной, это не был бы этот столбец, но он есть) с каждым разделом, имеющим одно значение. Ex. PARTITION "PARTION1" VALUES ('C').
У нас также есть NLS_COMP = LINGUISTIC.
Обрезка раздела при указании значения в этой колонке не работает.
SELECT * from table1 where column_partitioned_by = 'C'
Это делает полное сканирование таблицы для всех разделов, а не только для соответствующего.
В соответствии с документами here «Параметр NLS_COMP не влияет на поведение сравнения для секционированных таблиц».
Если я выдаю:
ALTER SESSION SET NLS_COMP = BINARY
А потом:
SELECT * from table1 where column_partitioned_by = 'C'
это правильно подрезать разделы вниз. (Я основываю чернослив/не вычеркнул планы, сгенерированные)
Есть ли что-нибудь, кроме хардкодов имен разделов в предложение from, которое будет работать здесь?
Кроме того, изменение определения раздела также отсутствует. Я в меньшинстве в своей команде, даже рассматривая это как проблему. До того, как я добрался туда, предыдущая команда решила, что «решит» эту проблему, отправив все запросы sql-приложения через строку-find-and-replace, которая добавит жестко обозначенные имена разделов в предложении FROM, и кто-то вручную обновит имена разделов в сохраненных procs по мере необходимости ... но он сломается в один прекрасный день, и он сломается. Я пытаюсь найти наименее инвазивный подход, но я боюсь, что их может не быть.
Предпочтительно, это было бы решение, которое только меняло бы запросы, а не базовую структуру db. Как я уже сказал, это решение просто не может существовать ...
Хотелось бы, чтобы я мог сделать что-нибудь подобное, но вижу мои правки выше. Я дам вам голосование за то, что вы технически корректны и в моем вопросе до редактирования. – rfusca