Decode360's Blog

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

            BlogJava :: 首頁 :: 新隨筆 :: 聯(lián)系 ::  :: 管理 ::
            302 隨筆 :: 26 文章 :: 82 評論 :: 0 Trackbacks
          ??? 今天想設(shè)置一下NLS_DATE_FORMAT參數(shù)來更改一下date參數(shù)的輸出格式,但是遇到了問題:
          ?
          SQL> select sysdate from dual;
          ?
          SYSDATE
          ---------
          07-NOV-08

          ?
          ??? 剛開始SPFILE里沒有配置NLS_DATE_FORMAT參數(shù)的,用了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
          ?
          ?
          ??? 在查閱文檔后,發(fā)現(xiàn)這個參數(shù)確實(shí)不能通過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,加進(jìn)了NLS_DATE_FORMAT參數(shù):
          ?
          SQL> select name,value,isspecified from v$spparameter where name='nls_date_format';
          ?
          NAME???????????? VALUE???????? ISSPEC
          ----------?????? ----------??? -------------------------
          nls_date_format? YYYY-MM-DD??? TRUE
          ?
          ?
          ??? 雖然Oracle里的參數(shù)換了,但是查詢后的顯示結(jié)果任然是一樣的:
          ?
          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參數(shù)主要還是受到OS的影響,每次登錄時會將OS的NLS_DATE_FORMAT參數(shù)加載進(jìn)去。
          ??? 基本上除了修改環(huán)境變量就只能通過alter session來修改了,暫時還沒有找到好一點(diǎn)的辦法。
          ?
          ?
          ??? 要注意并不單是顯示上的問題,而是在內(nèi)部存儲的值也會被覆蓋:
          ?
          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
          ?
          ??? 在沒有修改環(huán)境變量或session參數(shù)時,這個語句是無法執(zhí)行的。修改后可以執(zhí)行:
          ?
          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 閱讀(1418) 評論(1)  編輯  收藏 所屬分類: Oracle

          評論

          # re: NLS_DATE_FORMAT參數(shù)[未登錄] 2009-12-20 20:31 Frank
          呵呵,樓主搞混了
          其實(shí)nls_date_format參數(shù)(也包括其他nls_參數(shù))是分服務(wù)器端和客戶端的.

          樓主想要獲得查詢的格式是yyyy-mm-dd,那么只有alter session和修改windows鍵值是其作用的.修改oracle啟動參數(shù)是與查詢無關(guān)的,那是數(shù)據(jù)庫表內(nèi)date類型插入需要的格式.  回復(fù)  更多評論
            

          主站蜘蛛池模板: 武邑县| 儋州市| 襄汾县| 兴义市| 宁津县| 岗巴县| 淄博市| 行唐县| 锡林郭勒盟| 大庆市| 青阳县| 荔波县| 白河县| 嘉黎县| 曲水县| 鹤峰县| 长葛市| 宁安市| 城步| 河北区| 若尔盖县| 邻水| 通山县| 顺平县| 彩票| 蒙阴县| 连云港市| 孙吴县| 岳池县| 南安市| 南木林县| 孟津县| 八宿县| 丰镇市| 克什克腾旗| 米易县| 固安县| 运城市| 涡阳县| 苍山县| 安溪县|