造成ORA-01843 無效的月份 的一些原因

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>
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章