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";

...........

}


免责声明!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系本站邮箱yoyou2525@163.com删除。



 
粤ICP备18138465号  © 2018-2025 CODEPRJ.COM