Сокращение раздела Oracle с помощью NLS_COMP = Linguistic - PullRequest
0 голосов
/ 18 февраля 2010

Oracle 10g.

У нас есть большая таблица, разделенная столбцом varchar2 (если бы это было до меня, это был бы не этот столбец, но это так), причем каждый раздел имел одно значение. Ex. ЗНАЧЕНИЕ "PARTION1" ('C').

У нас также есть NLS_COMP = LINGUISTIC.

Сокращение раздела при указании значения в этом столбце не работает.

SELECT * from table1 where column_partitioned_by = 'C'

Выполняет полное сканирование таблицы всех разделов, а не только соответствующих.

Согласно документации здесь , «параметр NLS_COMP не влияет на поведение сравнения для секционированных таблиц».

Если я выдаю:

ALTER SESSION SET NLS_COMP = BINARY

А потом:

SELECT * from table1 where column_partitioned_by = 'C'

правильно удаляет разделы вниз. (Я основываю чернослив / не снимаю с созданных планов)

Есть ли что-нибудь, кроме жесткого кодирования имен разделов в предложении from, которое будет работать здесь?

Кроме того, изменение определения раздела также отсутствует. Я в меньшинстве в моей команде, поскольку даже рассматриваю это как проблему. Прежде чем я туда попал, предыдущая группа решила, что «решит» эту проблему, отправив все SQL-запросы приложения через строку-find-and-replace, которая добавляет жестко закодированные имена разделов в предложении FROM и предлагает кому-то вручную обновить имена разделов в хранимых процессах по мере необходимости ... но это сломается однажды, и это сломается сильно. Я пытаюсь найти наименее инвазивный подход, но боюсь, что его может и не быть.

Предпочтительно, это будет решение, которое изменяет только сами запросы, а не базовую структуру БД. Как я уже сказал, это решение может просто не существовать ...

1 Ответ

1 голос
/ 18 февраля 2010

Некоторые решения для прототипа:

Функция CAST.Вы можете разделить по выражению;Недостатком является то, что ваше приложение должно предоставлять аналогичное выражение.

Раздел на NLS_SORT(column_partitioned_by, 'NLSSORT=BINARY').Опять же, требуется изменение приложения.

Преобразование column_partitioned_by в числовое значение, возможно, с использованием таблицы кодов для преобразования между ними.Вы должны будете включить соединение с этой таблицей в приложение.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...