什么是rowID& rowNum(ROWID vs ROWNUM)

时间:2015-12-15 06:39:46

标签: sql oracle10g rownum rowid

我想了解rowIDrowNUM

之间的区别

如何在我们的表格中看到这两个。

执行此操作时:

SELECT * FROM emp WHERE rownum=1

它返回一个查询,但是当我对rowid执行相同操作时,它会显示

  

不一致的数据类型:预期ROWID获得NUMBER

即使在某些表中,rownum也会返回null。为什么这样?

请澄清一下:rowid vs rownum?(演示查询)

谢谢

编辑:需要使用别名来显示ROWIDROWNUM(因为它们是伪列) 像:

SELECT rownum r1, rowid r2 FROM emp

4 个答案:

答案 0 :(得分:14)

rownum和rowed都是伪列。

<强> ROWID

  

对于数据库中的每一行,ROWID伪列返回   行的地址。

示例查询将是:

SELECT ROWID, last_name  
   FROM employees
   WHERE department_id = 20;

有关rowid的更多信息:https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns008.htm

<强> ROWNUM

  

对于查询返回的每一行,ROWNUM伪列返回a   表示Oracle从a中选择行的顺序的数字   表或一组连接的行。选中的第一行的ROWNUM为1,   第二个有2个,依此类推。

您可以使用rownum限制结果数量,如下所示:

SELECT * FROM employees WHERE ROWNUM < 10;

有关rownum的更多信息:https://docs.oracle.com/cd/B19306_01/server.102/b14200/pseudocolumns009.htm

<强>差分

rowidrownum之间的实际差异在于,rowid是该行的永久唯一标识符。然而,rownum是暂时的。如果更改查询,则rownum编号将引用另一行,而rowid则不会。

因此ROWNUM是一个连续的数字,仅适用于特定的SQL语句。相反,ROWID是一行的唯一ID。

答案 1 :(得分:1)

Rownum(数字) =生成的输出序列号 Rowid(十六进制) =在插入行时自动生成。

SELECT rowid,rownum fROM EMP


ROWID ROWNUM                 
----- ---------------------- 
AAAR4AAAFAAGzg7AAA, 1                      
AAAR4AAAFAAGzg7AAB, 2                      
AAAR4AAAFAAGzg7AAC, 3                      
AAAR4AAAFAAGzg7AAD, 4                      
AAAR4AAAFAAGzg7AAE, 5      

答案 2 :(得分:0)

  1. Rowid提供行或记录的地址。 Rownum给出记录数
  2. Rowid永久存储在数据库中。 Rownum不会永久存储在数据库中
  3. 行号自动分配给表中的每个插入项。 Rownum是与select语句输出一起自动检索的动态值。
  4. 仅用于显示目的。

答案 3 :(得分:-1)

行ID显示行的唯一identification rownum显示唯一的默认数字系列。

select * from emp
where rownum<=5;   (it will execute correctly and gives output first 5 rows in your table )

select * from emp
where rowid<=5;  (wrong because rowid helpful to identify the unique value)