ORACLE 插入時間時顯示'無效的月份'

以前出現了ORA-01843的錯誤.

這個錯誤代表無效的月份一般在日期轉化的時候會提示。 alter session set NLS_DATE_FORMAT='DD-MON-YY';      

 翻看了半天發現:在客戶端系統裏的字符集使用的是中文的環境,(select sysdate from dual;可以通過此語句查看).

SYSDATE 04-9月 -07 -----> (2007年9月4號)

解決方法: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.

C:\Documents and Settings\Administrator>sqlplus 

請輸入用戶名: system

輸入口令:123

連接到:
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>
 

------解決方法--------------------------------------------------------
估計你的language是中文,你可以試試 '25-7月-2005 ',或把SESSION的語言改一下
alter session set nls_language=american; select months_between (to_date( '25-05-2005 ', 'DD-MM-YYYY '),to_date( '15-01-2005 ', 'dd-MM-yyyy ')) from dual; 看看你操作系統的區域設置是什麼? 你的Oracle默認語言是中文,但你插入的是英文習慣的日期,在執行你那條select語句之前先改Session:
alter session set nls_data_language=english;
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章