中国学网 - 学路上 - 儿童网 - 微电影 - 经验 - 学院 - 突袭网 - 商务网 - 笑话 - QQ - 我搜你 - 新闻 - IT科技 - 易沃网 - 文档库 - 3G - 软件下载 - 源代码 - 书法大师

DBA_OBJECTS + ROWNUM 和 DUAL + ROWNUM 一个结果比较的疑问

来源:互联网  责任编辑:小易  时间:2015/11/16 8:14:01
用户提出问题:DBA_OBJECTS + ROWNUM 和 DUAL + ROWNUM 一个结果比较的疑问,具体如下: 项目上使用到一个批量插入数据的SQL,需要将一个时间区间内的每一个日期随record存到表中。在获取日期值的子查询中,尝试了dual和dba_objects。
使用dual + ROWNUM:
SELECT TO_DATE('01-01-2015', 'DD-MM-YYYY') + ROWNUM
  FROM DUAL
 WHERE TO_DATE('01-01-2015', 'DD-MM-YYYY') + ROWNUM <=
       TO_DATE('10-01-2015', 'DD-MM-YYYY')

结果如下:


使用dba_objects + rownum:
SELECT TO_DATE('01-01-2015', 'DD-MM-YYYY') + ROWNUM
  FROM DBA_OBJECTS
 WHERE TO_DATE('01-01-2015', 'DD-MM-YYYY') + ROWNUM <=
       TO_DATE('10-01-2015', 'DD-MM-YYYY')

结果如下:

从测试结果中可以知道要使用dba_objects才行。但是不理解为什么dba_objects会产生循环的效果,而dual不会?哪位朋友有空讲解一下。

通过互联网整理获得以下解决方法:

=================1楼=====================

原因很简单,你直接查询dual表和dba_Object表看看。
dual表里面只有1条记录,而dba_Object里面有很多条记录。

换句话说,你只要找到一个表,里面存在>=你最后需要的记录的个数,就能取得你要的结果。

再换句话说,如果你的日期区间非常大,大到区间个数超过了dba_Object表里面记录的个数,那么查到的结果也是不对的,会少很多。

所以,你这2种做法都是不靠谱的。

=================2楼=====================

这样写应该可以


SELECT TO_DATE('01-01-2015', 'DD-MM-YYYY') + ROWNUM 
  FROM (select * from dual connect by rownum<1000) DUAL 
WHERE TO_DATE('01-01-2015', 'DD-MM-YYYY') + ROWNUM <= 
       TO_DATE('10-01-2015', 'DD-MM-YYYY') 

如果您还有更好的解决方法,请在最下面评论中留下您的解决方法


  • 本文相关:
  • 使用Mybatis执行sql时如何统一校验输入参数?
  • js里这种表述式是啥意思?return (y1 - y2 > 0 ? "Up" : "Down");
  • 请问基于云架构的J2EE架构应该怎么做?
  • spring ,hibernate 都是用到了asm字节码技术,请问它们具体都拿ASM来实现了什么功能?或者说在哪个功能上用到的
  • 如何判断操作系统是32位还是64位?
  • DBA_OBJECTS + ROWNUM 和 DUAL + ROWNUM 一个结果比较的疑问
  • ajax缺点?
  • 判断字符串是否是数字开头
  • 用java程序监视mysql的变化。求方法
  • 如何对URL地址栏传参的信息进行加密或保护
  • 免责声明 - 关于我们 - 联系我们 - 广告联系 - 友情链接 - 帮助中心 - 频道导航
    Copyright © 2015 www.zgxue.com All Rights Reserved