Показать сообщение отдельно
Старый 21.01.2008, 18:55   #10  
fed is offline
fed
Moderator
Аватар для fed
Ex AND Project
Соотечественники
Лучший по профессии 2017
Лучший по профессии 2015
Лучший по профессии 2014
Лучший по профессии AXAWARD 2013
Лучший по профессии 2011
Лучший по профессии 2009
 
2,913 / 5736 (197) ++++++++++
Регистрация: 13.03.2002
Адрес: Hüfingen,DE
+1 - это Oracle. Подноготная всего этого такова: В Аксапте все сравнения строк и сортировки по определению case insensitive. В MS SQL этот эффект достигается установкой case-insensitive кодовой страницы БД. В Oracle аналогичной функциональности долгое время не было (хотя, говорят,в 10 версии что-то появилось). Поэтому в старых версиях Аксапты (2.1,2.5) при записи в любое поле, которое было включено в индекс, данные переводились в нижний регистр, что изрядно нервировало пользователей (Как-то неприятно когда ФИО в emplId пишется и выводится на экран в нижнем регистре) . Поэтому начиная с версии Аксапта 3.0 (которая работала с ораклом 9 и выше, в котором уже можно было строить индекс не по полю, а по функции от поля), при указании в запросе сравнения по строчному полю или сортировки/группировки по таковому, поле заключается в функцию NLS_LOWER. Кроме того, при построении индексов, вместо строчных полей туда включается значение NLS_LOWER от поля. Таким образом - в большинстве случаев, в отличие от старых версий Аксапты, для пользователя незаметны внутренние махинации системы с регистром. Единственное исключение - как раз группировка. Ведь если мы сгруппировали по NLS_LOWER(emplId), то в списке полей в select мы тоже должны указать NLS_LOWER(emplId), поскольку в список полей агреггирующего запроса можно включать только значения выражений группировки и агрегатные функции. Поэтому, если строчное поле включено в список группировки, то и в списке группировки и в список полей в запросе оно включается с помощью NLS_LOWER()
За это сообщение автора поблагодарили: aidsua (1), gl00mie (3).