在开发Oracle SQL或PL/SQL程序过程中,我们常常遇到将字符串类型转换成DATE类型的需求。我们会使用to_date来实现这个转换需求。但有时候这种转换会出错,报ORA-01843:not a valid month。有时候这种转换在开发系统上测试时是正常的,部署到生产环境时却出这种错误。
例如,我们需要将字符串类型的字符串'19-JUN-01'转换为时间类型的对象。
这个字符串是常见的英文环境中的时间表达方式"天-月-年",其中"月"使用英文简写。所以使用to_date(xx,'dd-mon-yy')转换它,转换格式是'dd-mon-yy'。
但是,在实际转换操作时,转换失败,如下所示:
SQL> select To_Date('19-JUN-01','dd-mon-yy') from dual;
select To_Date('19-JUN-01','dd-mon-yy') from dual
ORA-01843: not a valid month
出错信息显示"月"所对应的数据无效。
就是说,to_date函数在这个系统中不能识别"JUN".这是英文的月简写。
如果换成中文的表达方式,如'19-10月-01'。则系统就能正确转换。如下所示:
SQL> select To_Date('19-10月-01','dd-mon-yy') from dual;
TO_DATE('19-10月-01','DD-MON-Y
------------------------------
2001-10-19
这个问题的本质是系统不能识别英文的月简写,而能识别中文。
Oracle系统的语言配置主要保存在V$NLS_PARAMETERS数据字典视图中。查询该视图关于语言的设置值。如下:
SQL> select * from v$nls_parameters where parameter like '%DATE%';
PARAMETER VALUE
---------------------------------------------------------------- ----------------------------------------------------------------
NLS_LANGUAGE SIMPLIFIED CHINESE
NLS_DATE_LANGUAGE SIMPLIFIED CHINESE
证实数据库系统是语言环境是简体中文,这也是数据库实例级别的配置。
如果需要使To_Date('19-JUN-01','dd-mon-yy') 正常操作,只需要修改一下NLS_DATE_LANGUAGE的值,修改为AMERICAN,就能识别。
对于开发人员而言,实例级的语言设置参数NLS_DATE_LANGUAGE是不能修改的,但你可以修改会话级的。只要将你连接上数据库实例的会话中该参数值修改为AMERICAN,也是能转换的。
SQL> alter session set nls_date_language='american';
Session altered
SQL> select To_Date('19-JUN-01','dd-mon-yy') from dual;
TO_DATE('19-JUN-01','DD-MON-YY
------------------------------
2001-6-19
SQL>
这样就可以使用了。
相关推荐
### 如何处理错误ORA-29275:部分多字节字符 #### 问题背景与描述 在Oracle数据库操作过程中,用户可能会遇到一个特定的错误提示——ORA-29275:部分多字节字符。这一错误通常出现在执行查询`SELECT * FROM V$...
ORA-01843 和 NLS_DATE_FORMAT 是在 Oracle 数据库中常见的错误,通常出现在日期处理时,尤其是当你尝试将非标准格式的日期字符串转换为日期类型时。这篇文章主要探讨了如何解决这类问题。 首先,`ORA-01843: 无效...
oracle网络配置(listener_ora-sqlnet_ora-tnsnames_ora).mht
在Oracle数据库操作中,"ORA-01480: STR 绑定值的结尾 Null 字符缺失"是一个常见的错误,通常与数据插入或更新时的格式问题有关。这个错误通常意味着在处理字符串数据时,Oracle无法找到预期的NULL终止符,这可能是...
### ORA-06512 数字或值错误,字符缓冲区太小 #### 背景介绍 在Oracle数据库应用开发过程中,经常会遇到处理大量字符数据的情况。Oracle提供了多种数据类型来存储不同长度的字符串,其中`VARCHAR2`是用于存储变长...
在使用Oracle Data Pump工具IMPDP(Import Data Pump)进行数据导入的过程中,可能会遇到ORA-39002和ORA-39070等错误。本文将针对这些错误的排查方法进行详细介绍,帮助用户理解问题的原因及解决策略。 ### 错误...
ORA-00604: 递归SQL层1出现错误 ORA-03106: 致命的双工通信协议错误 ORA-02063: 紧接着line(源于dblink) 以及 ORA-04052: 在查找远程对象时出错 ORA-00604: 递归SQL层1出现错误 ORA-03120: 双工转换例行程序:整数...
然而,当你尝试向CLOB字段插入数据时,如果超过了Oracle规定的最大限制,就会遇到“ORA-01704: 文字字符串过长”的错误。这个错误通常意味着你试图插入的字符串超过了Oracle数据库允许的最大长度,对于VARCHAR2类型...
在Oracle数据库管理过程中,遇到ORA-00132和ORA-00214这类错误时,往往意味着数据库配置或启动过程中出现了问题。下面将对这两个错误进行详细解析,并给出相应的解决方案。 #### 二、ORA-00132: Syntax Error or ...
### ORA-01460 错误原因分析 #### 概述 在Oracle数据库操作过程中,可能会遇到ORA-01460错误,该错误全称为“ORA-01460: 转换请求无法实现或不合理”。这一错误通常发生在数据类型转换或者与操作系统之间的数据...
Oracle数据库发生ORA-04031错误原因浅析及处理 Oracle数据库是甲骨文公司提供的一种分布式数据库管理系统,以分布式数据库为核心的软件产品。它具有完整的数据管理功能,作为一个关系数据库,它是一个非常实用的...
ORA-12518/TNS-12518错误通常是由于监听器在将客户端连接移交给服务器进程或调度进程时出现问题所导致的。通过对监听器日志的分析、配置文件的检查、系统资源的调整等步骤,可以有效地解决这一问题。同时,针对不同...
Oracle数据库在运行过程中,经常会遇到各种错误代码,错误代码ORA-00845是其中的一个,它是指“MEMORY_TARGET not supported on this system”。这个错误一般发生在尝试在不支持MEMORY_TARGET参数的系统上设置该参数...
摘要:本文主要解决ORACLE 8I数据库应用EXP工具时ORA-06553报错的问题,分析出现问题的原因,并提供了正确的解决方法和措施。 知识点1:Oracle 8I数据库EXP工具的应用 Oracle 8I数据库EXP工具是Oracle数据库提供...
ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法 ora-00604 错误 解决 方法ora-00604 错误 解决 方法
在创建Oracle数据库连接时遇到的错误ORA-01017和ORA-02063涉及到用户认证问题以及Oracle数据库版本之间的差异处理。ORA-01017错误表示用户名或密码无效,登录被拒绝,而ORA-02063则通常表示在Oracle数据库之间进行...
BLOG_LHR_【故障处理】ORA-30012的解决过程.pdfBLOG_LHR_【故障处理】ORA-30012的解决过程.pdf
在本文中,我们将深入探讨一个特定的Oracle数据库在Linux环境下启动失败的问题,涉及错误代码ORA-27154、ORA-27300、ORA-27301和ORA-27302,这些错误通常与系统信号量相关。此问题可能发生在尝试启动一个新的数据库...