1) 当我们在一个中文环境的客户端使用如下sql语句

INSERT INTO "temptable" ( DELIVER_DATE ) VALUES (TO_DATE('27-Jun-2007 15:57:30', 'DD-MON-YYYY HH24:MI:SS') )


Runtime error occurred: 1843 (ORA-01843: 无效的月份)


数据库会报告一个ORA-01843的错误,这是因为客户端是中文环境,格式mon就不能用英文的月份写法,必须用中文的“六月”


如果不想修改sql语句运行的话,就需要在执行该语句之前,使用alter session 命令将nls_date_language修改为american,如下:


alter session set nls_date_language='american'         --以英语显示日期


2)


今天出现了ORA-01843的错误.这个错误代表无效的月份一般在日期转化的时候会提示。


解决方法


alter session set NLS_DATE_FORMAT='DD-MON-YY';



可是今天我这样做还是不管用。实际上问题出在这里:



Microsoft Windows XP [版本 5.1.2600]


(C) 版权所有 1985-2001 Microsoft Corp.


O:>sqlplus greatfinish/finish


SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 6月 21 19:18:00 2006


Copyright (c) 1982, 2002, Oracle Corporation.     All rights reserved.



连接到:


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


greatfinish@ORA920> select to_date('JAN 01 1988','MON DD YYYY') from dual;


select to_date('JAN 01 1988','MON DD YYYY') from dual


                               *


ERROR 位于第 1 行:


ORA-01843: 无效的月份



greatfinish@ORA920> alter session set NLS_DATE_FORMAT='MON DD YYYY';


会话已更改。


--修改了NLS_DATE_FORMAT问题依然存在


greatfinish@ORA920> select to_date('JAN 01 1988','MON DD YYYY') from dual;


select to_date('JAN 01 1988','MON DD YYYY') from dual


                               *


ERROR 位于第 1 行:


ORA-01843: 无效的月份


--查了一下sysdate发现原因了是客户端字符集问题


greatfinish@ORA920> select sysdate from dual;


SYSDATE


------------


6月     21 2006


greatfinish@ORA920> exit


从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中断开


O:>set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK


O:>sqlplus greatfinish/finish


SQL*Plus: Release 9.2.0.1.0 - Production on Wed Jun 21 19:20:22 2006


Copyright (c) 1982, 2002, Oracle Corporation.     All rights reserved.



Connected to:


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


--修改完毕成功select


greatfinish@ORA920> select to_date('JAN 01 1988','MON DD YYYY') from dual;


TO_DATE('


---------


01-JAN-88


greatfinish@ORA920>