错误提示
问题分析
查询当前系统中,日期的显示方式:
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”;
…
}