Michał Z.

Michał Z. Programista

Temat: Jak zmienić collation bazy

Witam,
Dopiero zaczynam przygodę z Oraclem, wiec zadam pewnie trochę lamerskie pytanie. Otóż miałem polskie ustawienia językowe na laptopie i zainstalowałem sobie lokalnie Oracle 10 w wersji XE. Wrzuciłem tam bazę, którą używa aplikacja napisana w C# i niestety w trakcie operacji np. na walutach i datach dostaje błąd "invalid format". Z tego co sprawdziłem to wszystkie ustawienia językowe NLS mam polskie, a baza i aplikacja napewno powinna działać na English(United States). Czy jest jakaś opcja, żeby zmienić to na poziomie bazy lub całej instancji? Próbowałem NLS_LANG, ale tylko w odniesieniu do jednej sesji.
Kamil Stawiarski

Kamil Stawiarski Oracle Certified
Master | Oracle ACE

Temat: Jak zmienić collation bazy

Hej,
Podaj przykład polecenia, które powoduje pojawienie się błędu. Przy datach może chodzić o nieprawidłową wartość NLS_DATE_FORMAT a przy liczbach np. o NLS_NUMERIC_CHARACTERS. Jeśli napiszesz przykład konkretnego zapytania, które się wysypuje, to łatwiej będzie ustalić przyczynę.

Kamil.
Michał Z.

Michał Z. Programista

Temat: Jak zmienić collation bazy

Czesc,
Aplikacja wywala mi sie juz na samym poczatku przy poleceniu Select ktore ma kilkadziesiat linijek i chodzi o liczbe z kropka zamiast przecinka (lub odwrotnie), wiec pewnie NLS_NUMERIC_CHARACTERS. Póżniej są jeszcze operacje na datach i walutach wiec zapewne też sie wywali. Powód jest tego taki jak napisałem w pierwszym poscie, że ustawienia językowe mam polskie, a program operuje na danych w formacie English(United States) na 100%. Pytanie moje jak to zmienic kompleksowo na mojej bazie?
Wg. mnie mozliwe rozwiązania to:
- odtworzyc na nowo baze z innymi ustawieniami
- zmienic ustawienia dla calej instancji
- zmienic ustawienia dla instniejacej juz bazy
Oczywiscie nie wiem które z nich jest realne i jak to zrobić. W MS SQL byłaby to dla mnie łatwiejsze, a w Oracle nie wiem jak podejśc do tego tematu.

EDIT: Ok, zrobiłem to przez zmianę wpisu w rejestrze. Ustawiłem rekord NLS_LANGUAGE na taki jaki chciałem.Michał Z. edytował(a) ten post dnia 29.12.10 o godzinie 10:42

Temat: Jak zmienić collation bazy

Michał Z.:
EDIT: Ok, zrobiłem to przez zmianę wpisu w rejestrze. Ustawiłem rekord NLS_LANGUAGE na taki jaki chciałem.Michał Z. edytował(a) ten post dnia 29.12.10 o godzinie 10:42

Chyba raczej na taki jaki faktycznie masz na kliencie. Tzn. w systemie operacyjnym. ?
Michał Z.

Michał Z. Programista

Temat: Jak zmienić collation bazy

Jacek Tomaka:
Michał Z.:
EDIT: Ok, zrobiłem to przez zmianę wpisu w rejestrze. Ustawiłem rekord NLS_LANGUAGE na taki jaki chciałem.

Chyba raczej na taki jaki faktycznie masz na kliencie. Tzn. w systemie operacyjnym. ?

Niezupełnie, albo chyba Cie nie zrozumiałem. Napisałem w pierwszym poście, że miałem polskie ustawienia językowe w systemie (Windows XP) i z takimi domyślnie zainstalowała mi się instancja Oracle XE. Natomiast chciałem je później zmienić na English (United States). Udało się przez zmianę wpisu w rejestrze. Są jakieś inne sposoby?Michał Z. edytował(a) ten post dnia 02.01.11 o godzinie 19:08

Temat: Jak zmienić collation bazy

Tylko pytanie co to ustawienie w rejestrze zmienilo. Moim zdaniem jezyk (a co za tym idzie locale, a co za tym idzie NLS_NUMERIC_CHARACTERS) ale klienta.
Oznacza to, że przy połączeniu do serwera klient (lub serwer nie wiem dokladnie) musi dokonać odpowiednich konwersji znaków(jeśli ustawienia klienta i serwera się różnią), a w tym przypadku uzyskałeś efekt który chciałeś - mianowicie powiedziałeś Oracle'owi, że chcesz zeby wprowadzoną kropkę traktował jako separator dziesiętny. Przy okazji prawdopodobnie pozbyłeś się możlwiości wprowadzania ( i poprawnego odczytywania ) znaków ą i ł. Czy się mylę?

Efekt podobny (ale z możliwością wprowadzania znaków) uzyskałbyś ustawiając zmienną środowiskową lub dodając wpis w rejestrze NLS_NUMERIC_CHARACTERS=.,

Ale może gadam głupoty. Moze ą i ł będą działać tak długo jak masz character set klienta odpowiedni, zalezy którą cześć NLS_LANG zmieniles.
Michał Z.

Michał Z. Programista

Temat: Jak zmienić collation bazy

Jacek Tomaka:
Ale może gadam głupoty. Moze ą i ł będą działać tak długo jak masz character set klienta odpowiedni, zalezy którą cześć NLS_LANG zmieniles.

Pewnie masz rację Jacku. Zmieniłem ustawienia klienta, ale tak jak mówię z Oraclem mam do czynieniapo raz pierwszy.
Precyzyjniej rzecz ujmując zmieniłem klucz NLS_LANG z HKEY_LOCAL_MACHINE-->SOFTWARE--> ORACLE ---> KEY_OraClient11g_home1 na wartość NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1
Czy dodanie NLS_NUMERIC_CHARACTERS=. dałoby taki sam efekt? Co z walutami i datami?
Suma sumarum działa tak jak chciałem i jestem zadowolony. Dzięki za wytłumaczenie mniej więcej mojego problemu.

Temat: Jak zmienić collation bazy

NLS_LANG=AMERICAN_AMERICA.WE8ISO8859P1

Śliska sprawa. Zwłaszcza ostatni człon.
Czy dodanie NLS_NUMERIC_CHARACTERS=. dałoby taki sam efekt? Co z walutami i datami?

Byłyby nadal polskie. NLS_NUMERIC_CHARACTERS=., to tylko separatory.
Suma sumarum działa tak jak chciałem i jestem zadowolony. Dzięki za wytłumaczenie mniej więcej mojego problemu.

Liczyłem raczej, że mi ktoś wytłumaczy;) Localesy to dość skomplikowana materia w Oracle;D
Powodzenia then.



Wyślij zaproszenie do