iteye_10636 2015-01-14 16:17
浏览 413
已采纳

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

项目上使用到一个批量插入数据的SQL,需要将一个时间区间内的每一个日期随record存到表中。在获取日期值的子查询中,尝试了dual和dba_objects。
使用dual + ROWNUM:
[code="sql"]
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')
[/code]
结果如下:
[img]http://dl2.iteye.com/upload/attachment/0105/2670/3817de00-0fac-3ad2-8c4f-1d1ec0ee57c0.png[/img]

使用dba_objects + rownum:
[code="sql"]
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')
[/code]
结果如下:
[img]http://dl2.iteye.com/upload/attachment/0105/2672/ddd2cc35-52e6-39d1-a23f-b7c68cdfd6c5.png[/img]
从测试结果中可以知道要使用dba_objects才行。但是不理解为什么dba_objects会产生循环的效果,而dual不会?哪位朋友有空讲解一下。 :D

  • 写回答

2条回答 默认 最新

  • weixin_42622339 2015-01-14 16:47
    关注

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

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

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

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

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论
查看更多回答(1条)

报告相同问题?

悬赏问题

  • ¥15 多址通信方式的抗噪声性能和系统容量对比
  • ¥15 winform的chart曲线生成时有凸起
  • ¥15 msix packaging tool打包问题
  • ¥15 finalshell节点的搭建代码和那个端口代码教程
  • ¥15 Centos / PETSc / PETGEM
  • ¥15 centos7.9 IPv6端口telnet和端口监控问题
  • ¥20 完全没有学习过GAN,看了CSDN的一篇文章,里面有代码但是完全不知道如何操作
  • ¥15 使用ue5插件narrative时如何切换关卡也保存叙事任务记录
  • ¥20 海浪数据 南海地区海况数据,波浪数据
  • ¥20 软件测试决策法疑问求解答