以前出现了ORA-01843的错误.这个错误代表无效的月份一般在日期转化的时候会提示。
解决方法
alter session set NLS_DATE_FORMAT='DD-MON-YY';
今天插入数据时又遇到'无效的月份'的错误.
翻看了半天发现:在客户端系统里的字符集使用的是中文的环境,(select sysdate from dual;可以通过此语句查看).
SYSDATE
--------------
04-9月 -07
解决方法:exit退出sqlplus.进入cmd 输入set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
重新登录sqlplus system/systempwd
执行select sysdate from dual;
SYSDATE
------------
04-SEP-07
再次执行插入数据脚本程序,问题解决
可这个问题一直没有彻底解决,就是,一旦退出sqlplus.如果不再设置,字符集设置又回到了以前的样子.不知有没有一劳永逸的方法?
(我的方法是在环境变量里设置一个NLS_LANG = AMERICAN_AMERICA.ZHS16GBK)
Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.
C:\Documents and Settings\Administrator>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期六 3月 22 13:56:17 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
请输入用户名: scott/a123456
连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL> CREATE TABLE EMP
2 (EMPNO NUMBER(4) NOT NULL,
3 ENAME VARCHAR2(10),
4 JOB VARCHAR2(9),
5 MGR NUMBER(4),
6 HIREDATE DATE,
7 SAL NUMBER(7, 2),
8 COMM NUMBER(7, 2),
9 DEPTNO NUMBER(2));
表已创建。
SQL> INSERT INTO EMP VALUES
2 (7521, 'WARD', 'SALESMAN', 7698,
3 TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);
TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30)
*
ERROR 位于第 3 行:
ORA-01843: 无效的月份
SQL> alter session set nls_language=american ;
Session altered.
SQL> INSERT INTO EMP VALUES
2 (7521, 'WARD', 'SALESMAN', 7698,
3 TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);
1 row created.
SQL> commit ;
Commit complete.
SQL>
本文来自http://hi.baidu.com/xcl119xcl/blog/item/f3d647017080cade277fb5bb.html
解决方法
alter session set NLS_DATE_FORMAT='DD-MON-YY';
今天插入数据时又遇到'无效的月份'的错误.
翻看了半天发现:在客户端系统里的字符集使用的是中文的环境,(select sysdate from dual;可以通过此语句查看).
SYSDATE
--------------
04-9月 -07
解决方法:exit退出sqlplus.进入cmd 输入set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK
重新登录sqlplus system/systempwd
执行select sysdate from dual;
SYSDATE
------------
04-SEP-07
再次执行插入数据脚本程序,问题解决
可这个问题一直没有彻底解决,就是,一旦退出sqlplus.如果不再设置,字符集设置又回到了以前的样子.不知有没有一劳永逸的方法?
(我的方法是在环境变量里设置一个NLS_LANG = AMERICAN_AMERICA.ZHS16GBK)
Microsoft Windows [版本 5.2.3790]
(C) 版权所有 1985-2003 Microsoft Corp.
C:\Documents and Settings\Administrator>sqlplus
SQL*Plus: Release 9.2.0.1.0 - Production on 星期六 3月 22 13:56:17 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
请输入用户名: scott/a123456
连接到:
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
SQL> CREATE TABLE EMP
2 (EMPNO NUMBER(4) NOT NULL,
3 ENAME VARCHAR2(10),
4 JOB VARCHAR2(9),
5 MGR NUMBER(4),
6 HIREDATE DATE,
7 SAL NUMBER(7, 2),
8 COMM NUMBER(7, 2),
9 DEPTNO NUMBER(2));
表已创建。
SQL> INSERT INTO EMP VALUES
2 (7521, 'WARD', 'SALESMAN', 7698,
3 TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);
TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30)
*
ERROR 位于第 3 行:
ORA-01843: 无效的月份
SQL> alter session set nls_language=american ;
Session altered.
SQL> INSERT INTO EMP VALUES
2 (7521, 'WARD', 'SALESMAN', 7698,
3 TO_DATE('22-FEB-1981', 'DD-MON-YYYY'), 1250, 500, 30);
1 row created.
SQL> commit ;
Commit complete.
SQL>
本文来自http://hi.baidu.com/xcl119xcl/blog/item/f3d647017080cade277fb5bb.html