Oracle问题:ORA-01843: 无效的月份

错误提示

错误提示

问题分析

查询当前系统中,日期的显示方式:

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参数。

解决方式

  1. 临时方法(退出当前会话就会恢复)

每次会话时,修改参数为english或American:

ALTER SESSION SET nls_date_language = 'American';
  1. 永久方法:修改glogin.sql文件

文件路径为:D:\oracle11g\Administrator\product\11.2.0\dbhome_1\sqlplus\admin

在文件中加入:

ALTER SESSION SET nls_date_language = 'American';

注:使用SQL Plus有效,PLSQL developer无效。

  1. 永久方法:修改注册表(Windows)

位置:HKEY_LOCAL_MACHINE\SOFTWARE\Oracle\KEY_OraDb11g_home1

新建字符串值:NLS_DATE_LANGUAGE
其值为:American

注:SQL Plus和PLSQL developer均有效。

  1. 永久方法:修改用户环境变量(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";

...........

}

posted @ 2020-03-18 16:14  木木木夕  阅读(7728)  评论(0编辑  收藏  举报