什么是 rowID 和 rowNum(ROWID 与 ROWNUM)
What is rowID & rowNum (ROWID vs ROWNUM)
我想知道 rowID
和 rowNUM
之间的区别
以及如何在我们的 table.
中看到这两个
当我执行此操作时:
SELECT * FROM emp WHERE rownum=1
它 returns 一个查询但是当我对 rowid 做同样的事情时它说
inconsistent datatypes: expected ROWID got NUMBER
甚至在某些 table 中,rownum returns null 。为什么会这样?
请澄清一下:rowid vs rownum?(演示查询)
谢谢
编辑:需要使用别名来显示 ROWID
和 ROWNUM
(因为它们是伪列)
喜欢:
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
差异
rowid
和 rownum
之间的实际区别在于,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)
- rowid 给出行或记录的地址。 Rownum 给出记录数
- Rowid 永久保存在数据库中。 Rownum 没有永久存储在数据库中
- 每插入一个table都会自动分配rowid。 Rownum 是随 select 语句输出自动检索的动态值。
- 仅供展示。
我想知道 rowID
和 rowNUM
以及如何在我们的 table.
中看到这两个当我执行此操作时:
SELECT * FROM emp WHERE rownum=1
它 returns 一个查询但是当我对 rowid 做同样的事情时它说
inconsistent datatypes: expected ROWID got NUMBER
甚至在某些 table 中,rownum returns null 。为什么会这样?
请澄清一下:rowid vs rownum?(演示查询)
谢谢
编辑:需要使用别名来显示 ROWID
和 ROWNUM
(因为它们是伪列)
喜欢:
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
差异
rowid
和 rownum
之间的实际区别在于,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)
- rowid 给出行或记录的地址。 Rownum 给出记录数
- Rowid 永久保存在数据库中。 Rownum 没有永久存储在数据库中
- 每插入一个table都会自动分配rowid。 Rownum 是随 select 语句输出自动检索的动态值。
- 仅供展示。