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 无线电能传输系统MATLAB仿真问题
  • ¥50 如何用脚本实现输入法的热键设置
  • ¥20 我想使用一些网络协议或者部分协议也行,主要想实现类似于traceroute的一定步长内的路由拓扑功能
  • ¥30 深度学习,前后端连接
  • ¥15 孟德尔随机化结果不一致
  • ¥15 apm2.8飞控罗盘bad health,加速度计校准失败
  • ¥15 求解O-S方程的特征值问题给出边界层布拉休斯平行流的中性曲线
  • ¥15 谁有desed数据集呀
  • ¥20 手写数字识别运行c仿真时,程序报错错误代码sim211-100
  • ¥15 关于#hadoop#的问题