-
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个答案 按时间排序 按投票排序
-
采纳的答案
原因很简单,你直接查询dual表和dba_Object表看看。
dual表里面只有1条记录,而dba_Object里面有很多条记录。
换句话说,你只要找到一个表,里面存在>=你最后需要的记录的个数,就能取得你要的结果。
再换句话说,如果你的日期区间非常大,大到区间个数超过了dba_Object表里面记录的个数,那么查到的结果也是不对的,会少很多。
所以,你这2种做法都是不靠谱的。2015年1月14日 16:47
-
这样写应该可以
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
相关推荐
因为ROWNUM是对结果集加的一个伪列,即先查到结果集之后再加上去的一个列 (强调:先要有结果集)。简单的说 rownum 是对符合条件结果的序列号。它总是从1开始排起的。所以你选出的结果不可能没有1,而有其他大于1的值...
oracle rownum和distinct
MLDN魔乐科技_Oracle课堂19_修改约束、ROWNUM MLDN魔乐科技_Oracle课堂19_修改约束、ROWNUM
1.或许有的人会用id+limit来实现上一条,下一条功能.但是.我们试想一下.有的业务并不是用id来排序的.那这样的方法就没效果了. 2.现在找到了生成rownum的方法,并且优化了执行速度. 3.直接上我项目里的sql,希望对大家...
注意:对 rownum(伪列) 只能使用 <...如果直接按如下查询得下图结果,显然不正确的,rownum(伪列) 是按查询顺序来排列的,应当先查询筛选排好列,再查询例如上例 查询法; Select rownum,first_name,sa
oracle 分页查询 使用ROWNUM技巧及陷阱
MLDN魔乐科技JAVA培训_Oracle课堂19_修改约束、ROWNUM.rar
代码如下: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 ,...
rownum是Oracle数据库中的一个特有关键字,返回的是一个数字代表记录的行号。 基础知识:rownum只能做<或者<=的条件查询,如果要rownum进行51到100这样的范围判断,需要先查询出每一行的rownum,再用那个序号...
select grantee from dba_tab_privs where table_name='AUD$' and grantee not in ('DELETE_CATALOG_ROLE') and grantee not in (select grantee from dba_role_privs where granted_role='DBA'); select resource_...
oracle_SQL中 rowid 和rownum的使用
oracle_SQL中rowid与rownum的使用
select rownum,empno,ename from emp where rownum 查询表中相同部门中年龄最大的职员信息 select * from person2 p, (select max(age) age,dept from person2 group by dept)g where p.age = g.age and p.dept =...
ORACLE 中ROWNUM用法总结!数据库管理员及程序开发员必看。
oracle_SQL中ROWID与ROWNUM的使用 很有用哦
connect by rownum ) union all --增加最大分区 select 'alter table ' || v_minp_rec.table_owner || '.' || v_minp_rec.table_name || ' add partition ' || v_max_part_name || ' values less than ...
Oracle中rownum的使用
oracle 的rownum和咱们平时用的sqlserver的区别,其中好多的不一样!
ORACLE 中ROWNUM用法总结 整理版本,详细明了
仅仅使用select语句就可以完成分页,学习一下rownum 会有用处的