造成ORA-01843 无效的月份 的一些原因
发布时间:2020-12-12 18:46:47 所属栏目:百科 来源:网络整理
导读: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的错
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. 连接到: 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问题依然存在 --查了一下sysdate发现原因了是客户端字符集问题 greatfinish@ORA920> select sysdate from dual; SYSDATE ------------ 6月 greatfinish@ORA920> exit 从Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production JServer Release 9.2.0.1.0 - Production中断开 O:>set NLS_LANG=AMERICAN_AMERICA.ZHS16GBK SQL*Plus: Release 9.2.0.1.0 - Production on Wed Jun 21 19:20:22 2006 Connected to: --修改完毕成功select TO_DATE(' --------- 01-JAN-88 greatfinish@ORA920> (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |