rownum和rowid都是伪列,但是两者的根本是不同的。rownum是根据SQL查询出的结果给每行分配一个逻辑编号,所以SQL不同也就会导致最终rownum不同;rowid是物理结构上的,在每条记录INSERT到数据库中时,都会有一个唯一的物理记录。
rowid和rownum都是伪列,但含义完全不同。rowid是物理地址,用于定位Oracle中具体数据的物理存储位置,而rownum则是sql的输出结果排序。通俗的讲:rowid是相对不变的,rownum会变化,尤其是使用order by的时候。
rowid 用于定位数据表中某条数据的位置,是唯一的、也不会改变
rownum 表示查询某条记录在整个结果集中的位置, 同一条记录查询条件不同对应的 rownum 是不同的而 rowid 是不会变的
首先你要了解 ROWNUM 的作用 :ROWNUM是SQL中内置的一个函数,它的作用是:限制返回记录条数(有些类似游标的工作方式),
系统认为这样的函数开始值是 1 , 所以使用
rownum >某个数字 OR rownum = 非1的数字
都是不合法的!!!!!
你第一条SQL语句可以执行成功, 而且只能是一条数据, 这是正常的使用方法之一;
你第二条SQL语句不能执行成功, 你可以来借用 ROWNUM 的使用方法来分析一下;
①SELECT wpt.work_plan_id,wpt.begin_time,wpt.bus_id,wpt.status,RowNum from WORK_PLAN_TABLE wpt 相信你能够明白这条语句执行过后 会返回什么结果集吧!!
②接着把这条语句加上 WHERE 条件
SELECT wpt.work_plan_id,wpt.begin_time,wpt.bus_id,wpt.status,RowNum from WORK_PLAN_TABLE wpt WHERE ROWNUM = wpt.work_plan_id
假设你的表中有两条记录 wpt.work_plan_id 后有两个取值 ,
而在查询中会分别两次对 work_plan_id 进行判断 在这两个值中,如果有一条不满足 ROWNUM 的使用规范, 那么就不会返回任何结果!!
说到这里你应该明白了吧!!! 你的第二条语句违反了ROWNUM 使用规范,所以没有结果返回!!!
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)