錯誤提示
問題分析
查詢當前系統中,日期的顯示方式:
SELECT * FROM v$nls_parameters;
結果如下:
查詢不同情況日期顯示方式:
SELECT TO_CHAR(sysdate, 'DD-MON-YYYY','NLS_DATE_LANGUAGE = ''SIMPLIFIED CHINESE''') Chn,
TO_CHAR(sysdate, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = American') Ame,
TO_CHAR(sysdate, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = Japanese') Jap,
TO_CHAR(sysdate, 'DD-MON-YYYY', 'NLS_DATE_LANGUAGE = english') Eng
FROM DUAL;
結果:
可以看出:
語言為SIMPLIFIED CHINESE和Japanese時,DATA格式的月份必須為“X月”。
因此需要修改NLS_DATE_LANGUAGE參數。
解決方式
- 臨時方法(退出當前會話就會恢復)
每次會話時,修改參數為english或American:
ALTER SESSION SET nls_date_language = 'American';
- 永久方法:修改glogin.sql文件
文件路徑為:D:\oracle11g\Administrator\product\11.2.0\dbhome_1\sqlplus\admin
在文件中加入:
ALTER SESSION SET nls_date_language = 'American';
注:使用SQL Plus有效,PLSQL developer無效。
- 永久方法:修改注冊表(Windows)
位置:HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraDb11g_home1
新建字符串值:NLS_DATE_LANGUAGE
其值為:American
注:SQL Plus和PLSQL developer均有效。
- 永久方法:修改用戶環境變量(Unix)(未測試)
export NLS_DATE_FORMAT =AMERICAN
export NLS_DATE_FORMAT ='YYYY-MM-DD HH24:MI:SS'
RMAN會話中設置NLS_DATE_FORMAT 和NLS_LANG
run {
...........
sql 'alter session set NLS_DATE_FORMAT="YYYY-MM-DD HH24:MI:SS";
sql 'alter session set NLS_LANG ="AMERICAN";
...........
}