`
michael8335
  • 浏览: 187551 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

一个由于错误使用interval导致的错误

阅读更多
    今天发现失败了一条UT用例,失败原因是由于在向数据库插入时间时,时间的值是通过如下语句查询出来的
    select  sysdate - interval '4' month from dual;
    这句SQL的意思就是查询4个月前的今天,但是由于使用了interval '4' month这种方式,查询的是绝对时间距离,就是说这句查询等于当前时间,只是月份-4,其余的都不变,而今天又是一个特殊的日子,是什么日子呢,就是举世无双的公元2012年6月30日,那通过sysdate - interval '4' month计算的结果就是2012年2月30日,就连幼儿园的小朋友都知道,世界上肯定没有这一天,所以该语句执行肯定失败,结果就导致用例失败了,但是为什么昨天没有失败呢??那是因为今年是2012年了(神奇的年份),是闰年,所以昨天计算结果就是2012年2月29日,这个日期是正确的。
关于Oracle的interval类型,下面这两篇文章都做了详细讲解,
http://www.iteye.com/topic/148943
http://bjtdeyx.iteye.com/blog/1447301
下面就说一下如何解决这个问题,
1、非常简单,直接把月换算成日,即采用如下方式:
select sysdate -122 from dual;
经验证,这种方式是采用日期相减,即从当前日期向前推算有效日期,绝对不会出现不存在的日期
2、采用Oracle自带ADD_MONTHS(x, y)函数,该函数用于计算x加上y个月的结果。如果y是负数,就从x中减去y个月。所以上述语句又可以更改为如下
select ADD_MONTHS(sysdate,-4) from dual;
其实出现这个错误,主要是不完全了解interval这种类型,直接拿来就用,所以才出出现如此低级错误,不过从这个错误中倒是可以学到一点Oracle的知识,还是不错的
0
1
分享到:
评论

相关推荐

    ORA错误分析及解决

    接下来,我们来看ORA-07445错误,这是一个内核错误,通常涉及到Oracle的内部错误或者模块崩溃。这可能是由于内存泄漏、不兼容的硬件驱动、库问题或者是Oracle代码中的bug引起的。处理这个错误的方法包括: 1. 查看...

    Interval_oop

    标题“Interval_oop”可能指的是一个Java项目,它可能与定时任务、时间间隔操作或循环有关,这在编程中是一个常见的需求,特别是在需要定期执行某些任务的系统中。让我们深入探讨一下这个主题。 在Java中,`...

    JS 实现自动状态进度(百分比)time interval

    在JavaScript编程中,实现自动更新的状态进度(百分比)通常涉及到定时器(time interval)的使用,用于周期性地更新用户界面以反映任务的进度。这个功能在许多场景下都非常实用,比如文件上传、视频播放、计算过程...

    mq全错误号查询大全

    这通常发生在尝试删除或修改一个正在使用的通道时。 43. **4044 - Channel name error** - 通道名称错误。这通常发生在提供的通道名称格式不正确或不存在。 44. **4064 - Channel not active** - 通道未激活。这...

    基于回滚段的oracle错误恢复技术研究.pdf

    错误恢复主要应对由于管理员权限分配不当、用户误操作或程序错误导致的数据错误。在Oracle中,从10g版本开始引入了闪回技术,这一技术极大地简化了数据恢复流程,使得无需依赖备份就能迅速恢复数据。 【基于回滚段...

    MySQL 5.7中的关键字与保留字详解

    这会导致错误,因为 `interval` 是一个保留关键字。 2. 正确用法: ```sql CREATE TABLE `interval` (begin INT, end INT); ``` 在这里,我们使用反引号将 `interval` 作为表名,使得创建语句能够成功执行。 ...

    SUN 服务器cpu-memory出错类型和处理.doc

    3. `ecc_softerr_interval=1440` 和 `ecc_softerr_limit=2`:定义了Leaky Bucket算法的间隔时间和可接受的CE错误数量,超过这个阈值启动页面退役。 4. `max_pages_retired_bps=10`:限制可退役物理内存页面的数量,...

    TNS-12500解决过程

    在本例中,UGA分配了约2G,按每一个用户分配50M内存计算,连接数达到15个时,总分配内存已达到2G,将不能再增加新的连接。 因此,解决TNS-12500错误的方法是,增加系统的物理内存,调整内存分配参数,优化系统配置...

    如何根据Wowza服务器日志中的出错信息进行故障排查

    出现此错误通常是由于尝试使用不正确的凭据/授权连接到IP摄像头,导致连接被拒绝。 **解决办法:** - 检查并确认使用的凭据是否正确。 - 确认IP摄像头的连接地址是否正确无误。 ##### 3. Smooth Streaming 分片...

    在Vue环境下利用worker运行interval计时器的步骤

    接着,创建一个名为`workerTimer.js`的文件,定义一个`workerTimer`类,用于封装worker中的计时器方法: ```javascript // workerTimer.js export default class workerTimer { constructor() {} timeInterval...

    VB编制定时存盘程序.rar

    这个程序对于那些长时间编写代码、处理数据或进行其他计算机密集型任务的人来说非常有用,因为它可以防止由于意外关机、程序崩溃或忘记手动保存而导致的数据丢失。 在VB中实现定时存盘的核心概念是使用Timer控件和...

    bootstrap页面同时有两个(以上)轮播图问题

    在创建一个Bootstrap页面时,可能会遇到需要同时展示两个或更多轮播图的情况,然而在实际操作中,可能会遇到它们之间相互影响,导致轮播功能出现问题。本篇文章将深入探讨这个问题,提供解决方案,并通过实例来演示...

    高通平台通话——拨打号码不存在问题分析

    UE收到这个带有错误参数的邀请后,返回了一个422错误码,表示“Session Interval Too Small”。这表明网络侧可能存在配置错误,导致无法建立有效的会话。422错误通常意味着提议的会话持续时间过短,不符合SIP协议的...

    交换机端口假死(err-disable)解决方法[归类].pdf

    交换机端口假死是一种常见的网络问题,通常由多种原因引起,包括环路检测、BPDU Guard、通道配置错误、DHCP速率限制、DTCP闪断、GBIC无效、L2协议隧道错误、链路抖动等。当交换机检测到这些异常情况时,它会自动将...

    vb 源码 蓝屏 恶作剧

    在VB(Visual Basic)编程语言中,"蓝屏 恶作剧"指的是利用VB代码模拟Windows系统的蓝屏错误,以此来制作一个恶作剧程序。蓝屏是Windows操作系统在遇到严重错误时的一种表现,通常会导致系统崩溃或重启。下面我们将...

    C#写的一个钟表

    4. **定时器**:添加一个`Timer`组件,设置其`Interval`属性为1000毫秒(即1秒),并处理`Tick`事件。在事件处理程序中,更新时间并调用`Invalidate`方法强制重绘控件,使指针随着时间移动。 5. **角度计算**:指针...

    SQL Server 完整备份遇到的一个不常见的错误及解决方法

    如果问题得到解决,说明错误是由于检查点未能正常执行导致的。如果问题仍然存在,可能需要进一步检查数据库的状态,如日志文件的状态、内存使用情况,甚至考虑使用DBCC CHECKDB命令检查数据库的完整性。 总的来说,...

    51单片机return怎么用?单片机return的用法

    这意味着如果在执行`return`之前发生中断,那么在中断服务子程序返回后,可能无法恢复正确的中间状态,从而导致错误的结果。 例如,在函数写法1中,如果中断发生在条件表达式计算之后但`return`执行之前,那么中断...

    oracle job 创建

    提到的错误 `ORA-06550` 和 `PLS-00103` 通常是由于语法错误或拼写错误导致的。在这个例子中,错误可能源于复制代码时的格式问题。手动输入命令并重新执行可以解决此类问题。 在实际应用中,Oracle Jobs 可以用于...

    一个用VB6写的自动定时关机程序

    本篇将详细介绍如何使用Visual Basic 6(VB6)来开发这样一个程序。 1. **Visual Basic 6基础** VB6是微软公司推出的一种面向对象的编程语言,它具有直观的图形化界面,使得开发者能够快速构建Windows应用程序。它...

Global site tag (gtag.js) - Google Analytics