0 0

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

项目上使用到一个批量插入数据的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不会?哪位朋友有空讲解一下。

2015年1月14日 16:17
  • 大小: 2.4 KB
  • 大小: 4.7 KB

2个答案 按时间排序 按投票排序

0 0

采纳的答案

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

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

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

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

2015年1月14日 16:47
0 0

这样写应该可以


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') 

2015年1月15日 16:21

相关推荐

    oracle DBA_TAB_MODIFICATIONS 刷新

    Oracle DBA_TAB_MODIFICATIONS 是一个系统视图,用于跟踪数据库中的表在最近的DML(数据操纵语言)操作后的变化情况。这个视图是数据库性能监控的重要工具,它记录了表的插入、更新和删除等操作的信息。然而,它有...

    SQL_pagequery.rar_c+ QueryPage_查询分页

    例如,你可以创建一个函数,接收页码和每页大小作为参数,然后构建相应的SQL查询,并通过数据库连接执行。 为了优化分页查询,避免全表扫描带来的性能问题,可以考虑使用索引。对于频繁进行分页查询的列,建立索引...

    伪列(pseudo column)ROWNUM介绍

    `ROWNUM`伪列是Oracle数据库中一个非常有用的功能,它可以帮助我们轻松地实现分页查询和其他需要限制查询结果数量的场景。通过结合使用子查询、别名以及绑定变量等技术,我们可以更高效地利用`ROWNUM`来满足各种查询...

    Oracle_DBA_管理脚本.pdf

    - 第一个脚本可以根据指定的所有者(使用变量`&OWNER`)筛选出需要编译的对象类型(如包或包体)。 - 第二个脚本则是简单地列出所有无效对象的基本信息。 #### 进程/会话状态 - **脚本**: ```sql select p.pid...

    Oracle数据库中分页查询介绍

    select rownum r, all_objects.* from all_objects where rownum ) t where t.r &gt;= 30; ``` 为了提高效率和避免重复解析查询,可以使用绑定变量来处理分页参数: ```sql select * from ( select rownum r, all_...

    ROWNUM的使用技巧

    例如,如果我们希望对一个排序结果取 Top N 数据,使用 ROWNUM 存在一些问题。因为 ROWNUM 是在结果集返回之前进行排序的,因此,使用 ROWNUM 对排序结果进行 Top N 取值,可能不会达到预期的结果。 解决方案 为了...

    oracle rownum和distinct

    然而,许多开发者在使用这两个关键词时,却常常会遇到一些不太理解的地方,例如,当 DISTINCT 和 ROWNUM 一起使用时,为什么不能得到预期的结果?下面我们将详细地解释 ROWNUM 和 DISTINCT 的工作原理,并分析为什么...

    对于 Oracle 的 rownum 问题

    因为ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值...

    PB导出Eexcel

    - **创建 OLEObject**:使用 `CREATEOLEObject` 函数创建一个 OLE 对象。 ```pb OLEObject ole_object; ole_object = CREATEOLEObject; ``` - **连接 Excel 应用程序**: - 检查是否已打开 Excel,若未打开,则...

    如何在Oracle中实现搜索分页查询

    这个存储过程接受两个整数参数,`p_min`和`p_max`,分别代表分页的开始和结束位置,返回一个游标`p_rowset`。这样,应用程序只需要调用存储过程并传入相应的分页参数,就能获取指定范围的记录。 值得注意的是,...

    oracle rownum 的使用 和sqlserver有区别的!

    在数据库操作中,ROWNUM 是一个非常重要的伪列,主要用于返回查询结果的行序号。它在 Oracle 数据库中有着广泛的应用场景,尤其是在需要对查询结果进行分页显示、排序或者统计特定范围内的记录时尤为重要。本文将...

    MLDN魔乐科技_Oracle课堂19_修改约束、ROWNUM

    ROWNUM是Oracle中的一个伪列,它在查询结果集中为每一行分配一个唯一的数字。在处理大数据集时,ROWNUM可以帮助我们实现分页或者只获取前n条记录。例如,如果我们只想获取前10条记录,可以这样写: ```sql SELECT * ...

    ORACLE 中ROWNUM用法总结

    在Oracle数据库中,`ROWNUM`是一个非常有用的伪列,用于限制查询结果的行数,尤其是在处理大数据量或进行分页查询时。然而,`ROWNUM`的使用并不直观,尤其是当涉及到比较运算符(如`&gt;`, `&gt;=`, `=`等)时,容易引发...

    MLDN魔乐科技JAVA培训_Oracle课堂19_修改约束、ROWNUM.rar

    【描述】描述中提到的文件是一个视频教程,可能包含详细的讲解和实例演示,教导学员如何在Oracle数据库环境中处理表的约束以及运用ROWNUM功能进行数据操作。 【标签】"MLDN魔乐科技JAVA培训_Oracle课堂19_修改约束...

    mysql实现rownum和上一条,下一条功能

    1.或许有的人会用id+limit来实现上一条,下一条功能.但是.我们试想一下.有的业务并不是用id来排序的.那这样的方法就没效果了. 2.现在找到了生成rownum的方法,并且优化了执行速度. 3.直接上我项目里的sql,希望对大家...

    rownum用法(不使用minus)

    `rownum` 是 Oracle 数据库中的一个特殊字段,主要用于给查询结果集中的每一行分配一个唯一的序号,该序号从 1 开始递增。`rownum` 的主要用途之一是用于实现分页查询,即控制查询结果的数量。 #### 二、rownum与...

    C# Mysql 查询 Rownum的解决方法

    代码如下:SELECT @rownum:=@rownum+1 AS rownum,a.order_id ,case when a.Ordered =1 then ‘已分单’ end as Ordered,a.printed ,a.order_sn ,a.user_id ,b.user_name ,a.consignee ,a.tel ,a.mobile ,a.address ,...

    oracle中利用关键字rownum查询前20名员工信息及rownum用法

    注意:对 rownum(伪列) 只能使用 &lt;...如果直接按如下查询得下图结果,显然不正确的,rownum(伪列)  是按查询顺序来排列的,应当先查询筛选排好列,再查询例如上例  查询法; Select rownum,first_name,sa

    wxh ORACLE 安全检测的片段

    文章中提供了一个具体的SQL语句示例,用于验证当前用户是否具有对某些特定表(如`dba_users`)的访问权限: ```sql SELECT * FROM (SELECT * FROM (SELECT * FROM (SELECT * FROM v$version ORDER BY 1 ASC))) ...

    Oracle--ROWNUM.rar_oracle

    首先,`ROWNUM`是一个内置的伪列,它会在查询结果集产生时自动为每一行分配一个唯一的整数,从1开始递增。这个序列号并不存储在表中,而是在执行SQL查询时动态生成。因此,`ROWNUM`的值取决于查询的顺序,而不是表中...

Global site tag (gtag.js) - Google Analytics