2010-02-18 2 views
0

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. Как я уже сказал, это решение просто не может существовать ...

ответ

1

Некоторых решений прототипа:

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

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

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

+0

Хотелось бы, чтобы я мог сделать что-нибудь подобное, но вижу мои правки выше. Я дам вам голосование за то, что вы технически корректны и в моем вопросе до редактирования. – rfusca

Смежные вопросы