• 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:oracle11gAdministratorproduct11.2.0dbhome_1sqlplusadmin

    在文件中加入:

    ALTER SESSION SET nls_date_language = 'American';
    

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

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

    位置:HKEY_LOCAL_MACHINESOFTWAREOracleKEY_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";

    ...........

    }

  • 相关阅读:
    Nginx的启动、停止与重启
    用Java实现链表结构对象:单向无环链表
    java匿名内部类详解
    如何统计博客园的个人博客访问量
    Java 读写Properties配置文件
    java的枚举类型Enum解释
    接口测试框架1
    python几道简单的算法题
    很全的 Python 面试题
    有有面试
  • 原文地址:https://www.cnblogs.com/yyn-yang/p/12518072.html
Copyright © 2020-2023  润新知