症状: c/s程序本来运行正常,一次重装系统,重装oracle客户端后,insert日期格式数据,出现题目中错误。

解决办法:

Oracle时间格式讨论

在网上看见不少oracle新学者对oracle的时间格式很烦,经常是设计了一个带时间字段的表之后,向表插入数据失败。回想起自己刚开始学习 oracle时,也对这个时间格式摸不着头脑,虽然是小小的问题,高手们不屑于讨论,但对初学者来讲,这也是一个不大不小的坎,没找到门路的话, 可能几天都过不去,其实就是一层窗户纸,没什么难的。这里做一个简单的小结,因水平有限,请高手补充指正。

1 oracle对时间格式的数据存贮

oracle数据库中存放时间格式的数据,是以oracle特定的格式存贮的,占7个字节,与查询时显示的时间格式无关,具体哪个字节表示什么,我不太清 楚,请高手补充。存贮的时间包括年月日时分秒,最小精度为秒,不存贮秒以下的时间单位。因此在一些前台支持毫秒级的程序(如PB客户端程序)连接到 oracle数据库时应注意这点。查询时显示的时间格式,由会话环境决定,或者由用户定义,与数据库无关。

2 oracle时间显示形式

通常,客户端与数据库建立起连接后,oracle就会给一个缺省的时间格式数据的显示形式,与所使用的字符集有关。一般显示年月日,而不显示时分秒。例 如,使用us7ascii字符集(或者是其他的英语字符集)时,缺省的时间格式显示为:28-Jan-2003,而使用zhs16gbk字符集(或其他中 文字符集)时时间格式缺省显示为:2003-1月-28.向表中插入数据时,如果不使用转换函数,则时间字段的格式必须遵从会话环境的时间格式,否则不能 插入。查看当前会话的时间格式,可以使用以下的SQL语句:SQL> select sysdate from dual;(只能按照此语句的结果,才能插入数据)

3 向oracle表中插入时间格式的数据

向oracle表插入时间格式的数据是一个相对来讲比较麻烦的事情,要么你严格遵从当前会话的时间格式书写你的时间值,要么使用转换函数自定义时间数据的 格式。有两个与时间相关的转换函数:to_char 和 to_date .to_char(时间值,时间格式)函数将时间值转换为字符串形式,通常在查询中使用;to_date(字符串,时间格式)则把格式字符串转换时间值, 通常在insert 语句中使用。(呵呵,程序中没这样做,所以出错)在日期格式中,各种日期格式分量这里不作详细的讨论,请查oracle帮助文档中这两个函数的用法,或者 查一查PL/SQL编程的书,讲得很详细的。

4 如何修改会话中的日期格式

修改当前会话中的日期格式据说有三种办法,我只做过前两种办法的试验,修改glogin.sql文件的办法我没有试过,不知道是不是真的能行。下面一一解说。

(1) 在sql*plus中修改当前会话的日期格式SQL> alter session set nls_date_format = 'yyyy-mm-dd hh24:mi:ss';将当前会话的时间格式修改为这种格式: 2003-01-28 15:23:38,即四位年-两位月-两位日,空格,24小时的制的小时:分钟:秒。

这种修改方法,只对当前会话有效。注意,是对当前会话,而不是当前的sql*plus窗口。即如果你这样修改之后,又使用connect命令以其他用户连接到数据库或者是连接到其他的数据库,则这个日期格式就失效了,又恢复到缺省的日期格式。

(2) 修改注册表(只对windows系统)

在注册表hkey_local_machinesoftwareoraclehome0主键中增加一个字串(8i版本,9i也可以),字串名为 nls_date_format,字串的值为你希望定义的时间格式,如: yyyy-mm-dd hh24:mi:ss ,然后重新启动sql*plus.这种修改方法,对sql*plus窗口有效,即不论你打开多少个sql*plus窗口,缺省的都是这种时间格式。修改服务器端的注册表无效,只有修改客户端的注册表才有效。

unix系统下有没有这类似的方法,我不知道,我不会用unix或者是linux系统。

(3) 修改$oracle_homesqlplusadmin目录中glogin.sql文件这种方法我没有试过,不敢乱说,以免误导大家。请了解这种方法的高手来指教。

5 日期格式的优先级

如果在一个具体的环境中,既修改了注册表,又使用alter session命令修改了当前会话,那么哪一种修改方法有效呢?alter session命令有效,它的优先级是最高的。即不管当前的客户端环境是什么样的,注册表修改成什么样子了,只要你使用了alter session命令来修改了时间格式,那么就以你修改后的时间格式为准。

因此,如果直接使用sql*plus交互式查询或插入时间格式的数据,两种方法都可以用。如果使用sql文件来进行批量的插入或者是定时执行,最好在使用 时间数据前使用alter session命令来修改会话,以保证这个sql语句的正常运行与环境无关。同样的,如果是前台的客户端程序中需要使用到时间格式的数据,最好也在使用之 前修改会话,或者使用to_char或to_date函数进行转换(强烈推荐使用转换函数),以保证程序运行与环境无关。

小结:

oracle数据库中有关时间类型的数据,定义了很多函数,特别是关于时间数据的计算,非常方便,当然,方便的前提是你对oracle的时间函数比较熟 悉。在这里我有时候看到有些人存贮时间类型的数据时使用字符串类型的字段,我强烈的反对这种做法,不论是从系统的开销,还是从时间数据的计算来讲,或者是 取这个数据中的某一个子数据,比如取时间中的月,取时间中的星期等等,都不如直接存贮为时间类型的数据来得方便。只要熟悉了oracle关于时间的函数, 我相信大家会喜欢上oracle时间类型的数据的,非常灵活,功能强大,几乎可以做你所能想到的关于时间的一切事情——就看你对oracle的时间函数掌 握程度了以上在windows 2000 + oracle 805版本测试通过,不对之处,请高手指正。

解决ora-01861文字与格式字符串不匹配(转)相关推荐

  1. oracle插入时间报错,Oracle 插入时间时 报错:ORA-01861: 文字与格式字符串不匹配 的解决办法...

    一.写sql的方式插入到Oracle中 往oracle中插入时间  '2007-12-28 10:07:24' 如果直接按照字符串方式,或者,直接使用to_date('2007-12-28 10:07 ...

  2. 08 ORA系列:ORA-01861 文字与格式字符串不匹配

    如果希望对常见的Oracle异常ORA报错解决方案有系统的了解,请看<ORACLE系列异常总结ORA>. 现象:Oracle 插入时间时 ,报错:ORA-01861: 文字与格式字符串不匹 ...

  3. oracle文字与格式字符串不匹配的解决

    oracle文字与格式字符串不匹配的解决  Oracle的日期时间类型 在往oracle的date类型插入数据的时候,记得要用to_date()方法. 如insert into CUSLOGS(STA ...

  4. Oracle ORA-06861: 文字与格式字符串不匹配 记录两次无助的遭遇:存储过程直接执行正常,java调用存储过程则报错

    一天之内,出现了两次这样的尴尬遭遇:将参数直接放到存储过程中执行时,程序运行正常,但是通过java程序去调用数据库存储过程时,就抛出异常.我和我的同事分别遇到了一次,但是,原因却大不相同. 先说说我的 ...

  5. ORA-01861: 文字与格式字符串不匹配

    select to_date('20160401000000','yyyy-mm-dd') from dual; ---------- 报错:ORA-01861: 文字与格式字符串不匹配 原因:字符串 ...

  6. Oracle sql 错误 : ORA-01861: 文字与格式字符串不匹配和日期与字符串互转问题解决

    Oracle sql 错误 : ORA-01861: 文字与格式字符串不匹配和日期与字符串互转问题解决 参考文章: (1)Oracle sql 错误 : ORA-01861: 文字与格式字符串不匹配和 ...

  7. Orcal数据库中ORA-01861: 文字与格式字符串不匹配

    今天在比对数据库表中的时间发生了ORA-01861:文字与格式字符串不匹配的错误. 开始我以为sql语句写错了,仔细检查了一下,并没有发现错误,后来看了表中的时间字段存的数据,发现有的是2015-2- ...

  8. ​Mirth调用存储过程报错ORA-01861: 文字与格式字符串不匹配​

    Mirth调用存储过程报错.ORA-01861: 文字与格式字符串不匹配 这种绝对是日期的错误,要进行日期格式转换,具体呢需要自己一步步测试 上业务场景 function func_CreateCar ...

  9. oracle无效列类型1111以及文字与格式字符串不匹配问题

    1.无效列类型1111其中问题之一 就是说在oracle中参数可能传空 这里就需要在参数后面加上jdbcType=xxx, 下面举个例子 字符串与jdbcType就是这样 #{item,jdbcTyp ...

  10. 解决ora-01861文字与格式字符串不匹配

    症状:c/s程序本来运行正常,一次重装系统,重装oracle客户端后,insert日期格式数据,出现题目中错误. 解决办法: Oracle时间格式讨论 在网上看见不少oracle新学者对oracle的 ...

最新文章

  1. Access应用日志一
  2. python 解析XML xml.dom
  3. 编程之美-控制CPU占用率曲线方法整理
  4. jmeter达梦数据库
  5. 使用AspectJ,Javassist和Java Proxy进行代码注入的实用介绍
  6. 外设驱动库开发笔记5:AD7705系列ADC驱动
  7. mybatis获取表名——mybatis动态调用表名和字段名#{},${}
  8. IDEA查看Java类的UML关系图
  9. 《天天数学》连载47:二月十六日
  10. 第五章:Redis pipeline流水线
  11. vim 快捷键大全和插件大全
  12. 火星时代python培训
  13. 9550电机_扭矩公式9550是什么 电机扭矩计算公式T=9550P/n怎么算
  14. C语言开发环境搭建及调试
  15. 【桃园恋歌】mmd镜头+动作打包下载.zip
  16. 大三,在软件工程学习上的感悟
  17. 代码:灰度重心法求激光中心线(matlab)
  18. 为何软件需要数字签名
  19. pyecharts学习笔记
  20. 电脑仙人掌机器人作文_仙人掌作文3篇

热门文章

  1. 【好书推荐】《华为数据之道》
  2. 半导体存储器涨涨涨 趋势的力量不可逆转
  3. 嵌入式薪资真实情况,这届毕业生都拿多少钱!
  4. 基于Android的网上订餐系统
  5. Linux进程中Dec04什么意思,用last命令时会总显示些crash,
  6. Linux驱动调试之修改系统时钟中断定位系统僵死问题
  7. 获取WiFi MAC地址总结
  8. 世界上最远的距离_泰戈尔
  9. 14个纸张破损撕纸特效图片视频模板PR剪辑素材
  10. 紧扣时髦潮水 OPPO U701珍珠红亮相