什么是 rowID 和 rowNum(ROWID 与 ROWNUM)

What is rowID & rowNum (ROWID vs ROWNUM)

我想知道 rowIDrowNUM

之间的区别

以及如何在我们的 table.

中看到这两个

当我执行此操作时:

SELECT * FROM emp WHERE rownum=1

它 returns 一个查询但是当我对 rowid 做同样的事情时它说

inconsistent datatypes: expected ROWID got NUMBER

甚至在某些 table 中,rownum returns null 。为什么会这样?

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

谢谢

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

SELECT rownum r1, rowid r2 FROM emp

ROWNUM 和 ROWID 都是伪列。

Rowid

For each row in the database, the ROWID pseudo column returns the address of the row.

示例查询为:

SELECT ROWID, last_name  
   FROM employees
   WHERE department_id = 20;

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

行数

For each row returned by a query, the ROWNUM pseudo column returns a number indicating the order in which Oracle selects the row from a table or set of joined rows. The first row selected has a ROWNUM of 1, the second has 2, and so on.

您可以像这样使用 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。

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

SELECT rowid,rownum fROM EMP


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

行 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)
  1. rowid 给出行或记录的地址。 Rownum 给出记录数
  2. Rowid 永久保存在数据库中。 Rownum 没有永久存储在数据库中
  3. 每插入一个table都会自动分配rowid。 Rownum 是随 select 语句输出自动检索的动态值。
  4. 仅供展示。