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

Откуда: AB
Сообщений: 7429
Установка
alter system set NLS_DATE_FORMAT='DD/MM/YYYY' scope=spfile
с последующей перезагрузкой не помагает. Хотя в v$parameter значится желаемое, оракл использует дефолт DD-MON-YY, который, видимо, идет из database_proprties. Как там, database_proprties, поменять значение? Плиз
alter session set nls_date... 
не предлагать по разным причинам.
22 мар 07, 21:55    [3931031]     Ответить | Цитировать Сообщить модератору
 Re: Как сменить форма даты на уровне всей БД?  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
Relic Hunter
Установка
alter system set NLS_DATE_FORMAT='DD/MM/YYYY' scope=spfile
с последующей перезагрузкой не помагает. Хотя в v$parameter значится желаемое, оракл использует дефолт DD-MON-YY, который, видимо, идет из database_proprties. Как там, database_proprties, поменять значение? Плиз
alter session set nls_date... 
не предлагать по разным причинам.

Parameter type
String

Syntax
NLS_DATE_FORMAT = "format"

Default value
Derived from NLS_TERRITORY

Parameter class
Dynamic: ALTER SESSION

Range of values
Any valid date format mask but not exceeding a fixed length


NLS_DATE_FORMAT specifies the default date format to use with the TO_CHAR and TO_DATE functions. The default value of this parameter is determined by NLS_TERRITORY.

The value of this parameter can be any valid date format mask, and the value must be surrounded by double quotation marks. For example:

NLS_DATE_FORMAT = "MM/DD/YYYY"
23 мар 07, 00:10    [3931268]     Ответить | Цитировать Сообщить модератору
 Re: Как сменить форма даты на уровне всей БД?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7429
Установил NLS_DATE_FORMAT, как сказал, перезагрузил. Далее

SQL> select banner from v$version;

BANNER                                                                          
----------------------------------------------------------------                
Oracle Database 10g Release 10.2.0.2.0 - 64bit Production                       
PL/SQL Release 10.2.0.2.0 - Production                                          
CORE	10.2.0.2.0	Production                                                      
TNS for Solaris: Version 10.2.0.2.0 - Production                                
NLSRTL Version 10.2.0.2.0 - Production                                          

SQL> show parameter nls_date_format

NAME                                 TYPE                                       
------------------------------------ --------------------------------           
VALUE                                                                           
------------------------------                                                  
nls_date_format                      string                                     
DD/MM/YYYY                                                                      
SQL> select * from database_properties where property_name = 'NLS_DATE_FORMAT';

PROPERTY_NAME                                                                   
------------------------------                                                  
PROPERTY_VALUE                                                                  
--------------------------------------------------------------------------------
DESCRIPTION                                                                     
--------------------------------------------------------------------------------
NLS_DATE_FORMAT                                                                 
DD-MON-RR                                                                       
Date format                                                                     
                                                                                

SQL> select * from dual where sysdate = '22/03/2007';
select * from dual where sysdate = '22/03/2007'
                                    *
ERROR at line 1:
ORA-01843: not a valid month 


SQL> spool off
Как забороть без alter session?

xymbo
23 мар 07, 00:28    [3931299]     Ответить | Цитировать Сообщить модератору
 Re: Как сменить форма даты на уровне всей БД?  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
Когда alter system делаете,поместите формат даты в кавычки,и затем также все перезагружайте и пробуйте.
23 мар 07, 00:37    [3931311]     Ответить | Цитировать Сообщить модератору
 Re: Как сменить форма даты на уровне всей БД?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7429
Да пробовал так - не работает. Имеется глубокое подозрение что без CREATE DATABASE с другим CHARACTER SET не обойтись и то не уверен, что импорт пройдет при смене CHARACTER SET
xymbo
Когда alter system делаете,поместите формат даты в кавычки,и затем также все перезагружайте и пробуйте.
23 мар 07, 00:46    [3931321]     Ответить | Цитировать Сообщить модератору
 Re: Как сменить форма даты на уровне всей БД?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7429
Хотя

автор
NLS_DATE_FORMAT
Property Description
Parameter type String
Parameter scope Initialization parameter, environment variable, and ALTER SESSION
Default value Derived from NLS_TERRITORY
Range of values Any valid date format mask

Оно-то устанавливается через ALTER SYSTEM ..., вопросов нет, но продолжает использовать старый дефолт формат для Америки DD-MON-YYYY.
23 мар 07, 00:59    [3931331]     Ответить | Цитировать Сообщить модератору
 Re: Как сменить форма даты на уровне всей БД?  [new]
xymbo
Member

Откуда: Донской --> Москва
Сообщений: 2560
В винде все делаешь?Если да,то что в реестре стоит?
23 мар 07, 01:00    [3931332]     Ответить | Цитировать Сообщить модератору
 Где запускался SQLPLUS?  [new]
Sergei.Agalakov
Member

Откуда:
Сообщений: 575
Очень похоже на то, что клиент переписывает NLS_DATE_FORMAT. Я бы проверил, что glogin.sql не меняет NLS_DATE_FORMAT в DD-MON-RR.
Я, например, меняю его в YYYY-MM-DD HH24:MI:SS в glogin.sql.
23 мар 07, 01:07    [3931337]     Ответить | Цитировать Сообщить модератору
 Дополнение.  [new]
Sergei.Agalakov
Member

Откуда:
Сообщений: 575
Я это к тому, что дефолт для NLS_DATE_FORMAT будет использоваться только если он не был переопределен на клиенте: установки в реестре в Виндоуз, переменные окружения, переопределение в glogin.sql и login.sql для SQLPLUS и т.п.
Так что советую зайти на сервер терминалом, проверить glogin.sql и переменные окружения, а потом повторить тот же эксперимент или просто сделать
select sysdate from dual;
в SQLPLUS.
23 мар 07, 01:19    [3931344]     Ответить | Цитировать Сообщить модератору
 Re: Дополнение.  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7429
Прочесывание регистри, всех glogin.sql, и login.sql на диске на предмет nls_date_format, DOS>echo %nls_date_format% ничего не нашло. Углубляется впечетление использования NLS_DATE_FORMAT из database_properties.
Sergei.Agalakov
Я это к тому, что дефолт для NLS_DATE_FORMAT будет использоваться только если он не был переопределен на клиенте: установки в реестре в Виндоуз, переменные окружения, переопределение в glogin.sql и login.sql для SQLPLUS и т.п.
Так что советую зайти на сервер терминалом, проверить glogin.sql и переменные окружения, а потом повторить тот же эксперимент или просто сделать
select sysdate from dual;
в SQLPLUS.
23 мар 07, 01:35    [3931354]     Ответить | Цитировать Сообщить модератору
 Re: Как сменить форма даты на уровне всей БД?  [new]
Вячеслав Любомудров
Member

Откуда: Владивосток
Сообщений: 18484
NLS_DATE_FORMAT будет браться (если не определено явно) из NLS_TERRITORY, которая в свою очередь берется из NLS_LANG (опять же, если не определено явно)
Если ничего из этого не установлено, то только тогда NLS-параметры будут браться из NLS-параметров экземпляра
23 мар 07, 04:22    [3931414]     Ответить | Цитировать Сообщить модератору
 Re: Дополнение.  [new]
Q u a d r o
Member

Откуда: Canada
Сообщений: 1987
Relic Hunter
Прочесывание регистри, всех glogin.sql, и login.sql на диске на предмет nls_date_format, DOS>echo %nls_date_format% ничего не нашло. Углубляется впечетление использования NLS_DATE_FORMAT из database_properties.
Sergei.Agalakov
Я это к тому, что дефолт для NLS_DATE_FORMAT будет использоваться только если он не был переопределен на клиенте: установки в реестре в Виндоуз, переменные окружения, переопределение в glogin.sql и login.sql для SQLPLUS и т.п.
Так что советую зайти на сервер терминалом, проверить glogin.sql и переменные окружения, а потом повторить тот же эксперимент или просто сделать
select sysdate from dual;
в SQLPLUS.


select * from nls_session_parameters
select * from nls_instance_parameters
select * from nls_database_parameters

здесь можно глянуть что от чего отличается и откуда берётся.
23 мар 07, 04:48    [3931428]     Ответить | Цитировать Сообщить модератору
 Re: Дополнение.  [new]
SY
Member

Откуда: Middlebury, CT USA
Сообщений: 10043
Relic Hunter
Прочесывание регистри, всех glogin.sql, и login.sql на диске на предмет nls_date_format, DOS>echo %nls_date_format% ничего не нашло. Углубляется впечетление использования NLS_DATE_FORMAT из database_properties.


Well, first of all you are confusing NLS database, instance and session parameters. ALTER SYSTEM affects instance NLS parameters. Session NLS parameters are based on client settings. Since прочесывание регистри на предмет nls_date_format ничего не нашло, NLS_DATE_FORMAT is derived from NLS_TERRITORY. So first look for NLS_TERRITORY in registry. If it is not set, then look for NLS_LANG. if NLS_TERRITORY is not set explicitly, it is derived from NLS_LANG. And only if neither NLS_DATE_FORMAT nor NLS_TERRITORY nor NLS_LANG registry entries are not set, NLS_DATE_FORMAT is derived from NLS instance parameters. For example, even though ALTER SYSTEM NLS_ADATE_FORMAT='MM/DD/YYYY' SCOPE SPFILE was issued and instance was bounced it did not change a thing since registry entry NLS_LANG was set:


SQL> select value from v$parameter where name = 'nls_date_format';

VALUE
--------------------------------------------------------------------------------
DD/MM/YYYY

SQL> select value from nls_database_parameters where parameter = 'NLS_DATE_FORMAT';

VALUE
----------------------------------------
DD-MON-RR

SQL> select value from nls_instance_parameters where parameter = 'NLS_DATE_FORMAT';

VALUE
----------------------------------------
DD/MM/YYYY

SQL> select value from nls_session_parameters where parameter = 'NLS_DATE_FORMAT';

VALUE
----------------------------------------
DD-MON-RR

SQL> select sysdate from dual;

SYSDATE
---------
22-MAR-07

SQL> 

Then I renamed registry entry NLS_LANG to NLS_LANG_SAV and started a new session:


SQL*Plus: Release 10.2.0.1.0 - Production on Thu Mar 22 21:36:55 2007

Copyright (c) 1982, 2005, Oracle.  All rights reserved.

SQL> connect scott
Enter password: *****
Connected.
SQL> select sysdate from dual;

SYSDATE
----------
22/03/2007

SQL> 

Hope it helpls.

SY.
23 мар 07, 05:24    [3931437]     Ответить | Цитировать Сообщить модератору
 Re: Как сменить форма даты на уровне всей БД?  [new]
Relic Hunter
Member

Откуда: AB
Сообщений: 7429
SY
SY.
Thanks SY. It seems to be working know. However I would use TO_DATE function rather then change NLS_LANG settings system wide. Somehow it may affect some other globalization settings.

By
23 мар 07, 16:29    [3934841]     Ответить | Цитировать Сообщить модератору
Все форумы / Oracle Ответить