Decode360's Blog

业精于勤而荒于嬉 QQ:150355677 MSN:decode360@hotmail.com

  BlogJava :: 首页 :: 新随笔 :: 联系 ::  :: 管理 ::
  302 随笔 :: 26 文章 :: 82 评论 :: 0 Trackbacks
    今天想设置一下NLS_DATE_FORMAT参数来更改一下date参数的输出格式,但是遇到了问题:
 
SQL> select sysdate from dual;
 
SYSDATE
---------
07-NOV-08

 
    刚开始SPFILE里没有配置NLS_DATE_FORMAT参数的,用了ALTER SYSTEM ... SCOPE=SPFILE居然报错:
 
SQL> alter system set nls_date_format='YYYY-MM-DD' scope=spfile;
 
alter system set nls_date_format='YYYY-MM-DD' scope=spfile
 
ORA-02096: specified initialization parameter is not modifiable with this option
 
 
 
    但是使用ALTER SESSION是可以的:
 
SQL> alter session set nls_date_format='yyyy-mm-dd';
 
Session altered.
 
SQL> select sysdate from dual;
 
SYSDATE
----------
2008-11-07
 
 
    在查阅文档后,发现这个参数确实不能通过ALTER SYSTEM命令来修改:
 
You can alter the default value of NLS_DATE_FORMAT by:
■ Changing its value in the initialization parameter file and then restarting the
instance
■ Using an ALTER SESSION SET NLS_DATE_FORMAT statement
                       --《Globalization Support Guide》
 
 
    修改了SPFILE,加进了NLS_DATE_FORMAT参数:
 
SQL> select name,value,isspecified from v$spparameter where name='nls_date_format';
 
NAME             VALUE         ISSPEC
----------       ----------    -------------------------
nls_date_format  YYYY-MM-DD    TRUE
 
 
    虽然Oracle里的参数换了,但是查询后的显示结果任然是一样的:
 
SQL> select sysdate from dual;
 
SYSDATE
---------
07-NOV-08

 
    在HKEY_LOCAL_MACHINE-SOFTWARE-ORACLE-HOME0中加入NLS_DATE_FORMAT键值后,查询正常:
 
SQL> select sysdate from dual;
 
SYSDATE
----------
2008-11-07
 
 
    看来NLS_DATE_FORMAT参数主要还是受到OS的影响,每次登录时会将OS的NLS_DATE_FORMAT参数加载进去。
    基本上除了修改环境变量就只能通过alter session来修改了,暂时还没有找到好一点的办法。
 
 
    要注意并不单是显示上的问题,而是在内部存储的值也会被覆盖:
 
SQL> select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual;
select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual
               *
ERROR at line 1:
ORA-01861: literal does not match format string
 
    在没有修改环境变量或session参数时,这个语句是无法执行的。修改后可以执行:
 
SQL> select to_date(to_char(sysdate,'yyyy-mm-dd')) from dual;
 
TO_DATE(TO
----------
2008-11-10




-The End-

posted on 2008-11-02 19:58 decode360-3 阅读(1410) 评论(1)  编辑  收藏 所属分类: Oracle

评论

# re: NLS_DATE_FORMAT参数[未登录] 2009-12-20 20:31 Frank
呵呵,楼主搞混了
其实nls_date_format参数(也包括其他nls_参数)是分服务器端和客户端的.

楼主想要获得查询的格式是yyyy-mm-dd,那么只有alter session和修改windows键值是其作用的.修改oracle启动参数是与查询无关的,那是数据库表内date类型插入需要的格式.  回复  更多评论
  


只有注册用户登录后才能发表评论。


网站导航: