Decode360's Blog

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 ::  :: 管理 ::
            397 隨筆 :: 33 文章 :: 29 評論 :: 0 Trackbacks
          NLS_DATE_FORMAT參數研究
          ?
          ?
          ??? 今天想設置一下NLS_DATE_FORMAT參數來更改一下date參數的輸出格式,之前的 DATE類型默認格式的設置 這篇文章里也談到這個問題,當時認為既然可以用alter session來做,那么修改DB參數也是比較方便的,其實不然,具體可以看一下下文:
          ?
          ??? 首先看當前的格式:
          ?
          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
          ?
          ?
          posted on 2008-11-02 19:58 decode360 閱讀(927) 評論(0)  編輯  收藏 所屬分類: 07.Oracle
          主站蜘蛛池模板: 东海县| 都兰县| 河池市| 扎兰屯市| 广水市| 五家渠市| 察雅县| 永新县| 崇左市| 称多县| 和田市| 巴里| 横峰县| 壤塘县| 黔西县| 重庆市| 贡觉县| 望城县| 浏阳市| 壶关县| 且末县| 美姑县| 鄂尔多斯市| 绥德县| 霞浦县| 龙里县| 林州市| 定襄县| 台江县| 寿阳县| 洞口县| 育儿| 贵港市| 阿瓦提县| 朔州市| 郎溪县| 江油市| 同心县| 石嘴山市| 岫岩| 山西省|