Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Oracle Новый топик    Ответить
 NLS_SORT vs. NLSSORT  [new]
AntonGart
Member

Откуда:
Сообщений: 303
Не доходит до меня что-то, если я выставляю в init.ora NLS_SORT=LATIN, то это учитывается при ORDER BY? Или нужно еще ORDER BY NLSSORT(col1,'NLS_SORT=LATIN)? То же самое по LINGUISTIC INDEXES.
28 окт 03, 19:24    [396859]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
hinotf
Member

Откуда: Протвино
Сообщений: 722
Должно учитываться. Синтаксис вроде ORDER BY (...NLSSORT) нужен для разового изменения правла сортировки.

Nai tiruvantel ar varyuvantel i Valar tieyanna nu vilya
29 окт 03, 09:36    [397162]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
AntonGart
Member

Откуда:
Сообщений: 303
Все, я окончательно запутался с сортировкой... У меня создана база NLS_LANGUAGE=GERMAN, NLS_TERRITORY=GERMANY, NLS_SORT=GERMAN, NLS_COMP=BINARY, NLS_LENGTH_SEMANTICS=CHAR, NLS_NCHAR_CONV_EXCP=FALSE, NLS_CHARACTERSET=WE8MSWIN1252.
Стартую базу, используя init.ora. В нем:NLS_LANGUAGE=GERMAN, NLS_TERRITORY=GERMANY, NLS_SORT=GERMAN, NLS_COMP=ANSI, NLS_LENGTH_SEMANTICS=CHAR, NLS_NCHAR_CONV_EXCP=FALSE
Еще на клиенте в реестре выставлен NLS_LANG=GERMAN_GERMANY.WE8MSWIN1252.
Создал простейшую таблицу:
CREATE TABLE sort_test (name varchar2(20))
Добавил записи :
INSERT INTO sort_test VALUES('a');
Плюс еще 4 вида буквы а со всякими хвостиками и точками (умляут называются), плюс еще одну специальную немецкую буковку, похожую на В, плюс нормальное слово inter. Делаю
SELECT * FROM sort_test ORDER BY name

Получаю бред: а с хвостиками идут первыми, затем нормальная а, затем эта В, и в конце inter. Хотя по правилам должно быть: сначала а, затем с хвостиками, затем с двумя точками, затем inter и затем В (Так сортирует например MS SQL Server с collate Latin1_General_CI_AS).
Что еще непонятно, NLS_SESSION_PARAMETERS дает параметр NLS_LENGTH_SEMANTICS=BYTE, не смотря на init.ora.
29 окт 03, 14:42    [398053]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
AntonGart
Member

Откуда:
Сообщений: 303
Все это из sqlplus.
29 окт 03, 14:50    [398086]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
Violina
Member

Откуда: Санкт-Петербург
Сообщений: 3662
автор писал:
Получаю бред: а с хвостиками идут первыми, затем нормальная а, затем эта В, и в конце inter. Хотя по правилам должно быть: сначала а, затем с хвостиками, затем с двумя точками, затем inter и затем В (Так сортирует например MS SQL Server с collate Latin1_General_CI_AS).


По каким правилам? Вот пример из student guide и умляуты там предшествуют а.

How NLS Affects Sorts (continued)
The following examples illustrate sorting behavior:

SQL> ALTER SESSION SET NLS_SORT=BINARY;

Session altered.
SQL> SELECT letter FROM letters ORDER BY letter;
L
-
a
b
c
z
ue
ae
6 rows selected.
SQL> ALTER SESSION SET NLS_SORT= GERMAN;
Session altered.
SQL> SELECT letter FROM LETTERS ORDER BY 1;
L
-
ae
ue
a
b
c
z
6 rows selected.
29 окт 03, 15:10    [398140]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
AntonGart
Member

Откуда:
Сообщений: 303
Но это же неправильно, немцы так не сортируют, та же ЭсЦет должна идти в любом случае после двойной С. Вопрос: зависит ли сортировка также и от NLS_CHARACTERSET? И можно ли определить свою собственную сортировку?
29 окт 03, 15:29    [398208]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
Violina
Member

Откуда: Санкт-Петербург
Сообщений: 3662
И можно ли определить свою собственную сортировку?


В 9ке можно. В 8ке не знаю.
29 окт 03, 15:58    [398279]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
Violina
Member

Откуда: Санкт-Петербург
Сообщений: 3662
Попробуйте

Example 4-2 Monolingual German Sort
SELECT ENAME FROM EMP 

ORDER BY NLSSORT(ENAME, 'NLS_SORT = GERMAN')


Хотя в случае uni кодов все ОК

http://www.csis.gvsu.edu/GeneralInfo/Oracle/server.920/a96529/ch4.htm#1007112
29 окт 03, 16:04    [398294]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
Violina
Member

Откуда: Санкт-Петербург
Сообщений: 3662
Вот еще может быть полезным

Defining Linguistic Sort Sequences
The linguistic sort sequence also specifies how to handle special cases in sorting and case conversion. For example, the XSpanish linguistic sort sequence treats the double characters ch and ll as single characters.
Available linguistic sort sequences are:

Arabic XGerman Italian Spanish Czech German_Din Latin XSpanish Danish XGerman_Din Norwegian Swedish XDanish Greek Polish Swiss Dutch Hebrew Russian Turkish Finnish Hungarian Slovak West_European German Icelandic XSlovak

Example:
NLS_SORT = XGerman_Din
NLS_SORT = West_European

PS
Может .dba спросить?:)
29 окт 03, 16:09    [398308]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
hinotf
Member

Откуда: Протвино
Сообщений: 722
А может, spfile есть?
А ты мучаешься, меняешь init.ora ?


Nai tiruvantel ar varyuvantel i Valar tieyanna nu vilya
29 окт 03, 16:17    [398339]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
AntonGart
Member

Откуда:
Сообщений: 303
To Violina:
Да я уже вроде все читал, все пробовал... Что еще не пробовал, так это unicode и кодировку базы менять (так и не понял влияет ли она).
Что еще интересно, если очищаю NLS_LANG в реестре, то умляуты превращаются в ?.

P.S. А .dba наверняка знает, но молчит ;)
29 окт 03, 17:30    [398564]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
AntonGart
Member

Откуда:
Сообщений: 303
И еще: чем же отличаются NLS_SESSION_PARAMETERS от V$NLS_PARAMETERS и почему они заразы выводят мне все время NLS_COMP=BINARY, хотя в init.ora стоит ANSI?
29 окт 03, 17:58    [398649]     Ответить | Цитировать Сообщить модератору
 Re: NLS_SORT vs. NLSSORT  [new]
AntonGart
Member

Откуда:
Сообщений: 303
Блин, вот я глючил! Удалил все записи из таблицы и добавил все то же самое, но не в sqlplus, а в sqlplusw и все стало на места. Я то sqlplus как консольное приложение (видимо с другой кодировкой) запускал в winXP и при инсерте данные из этой кодировки в родную ПОЧЕМУ-ТО не перекодировались, хотя Oracle это обещает. Т.е. у меня вообще какие-то левые символы в таблице лежали. Кто бы подсказал, как мне теперь это настроить...
29 окт 03, 19:28    [398796]     Ответить | Цитировать Сообщить модератору
Между сообщениями интервал более 1 года.
 Re: NLS_SORT vs. NLSSORT  [new]
Gabit
Member

Откуда: Алматы
Сообщений: 501
Доброе время суток,

У меня база в кодировке UTF8.
У меня проблема с казахскими символами.
Они в базе идут после кириллицы, хотя должны быть между буквами кириллицы.
Посмотрел :
SELECT *
FROM v$nls_valid_values
WHERE parameter = 'SORT';

Не нашел подходящую.
Где можно посмотреть полный список для v$nls_valid_values и как его обновить ?
29 июн 17, 16:45    [20600265]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить