我想知道,oracle中的ROWID是否是递增生成的?如果我尝试下面的查询
select min(ROWID) from table我将始终在表中获得第一个插入行的ROWID,还是可能最终得到任意随机行的ROWID?如果有人能把这件事弄清楚,那会很有帮助的。
发布于 2014-06-06 12:37:00
“最小”rowid将--可能不是--总是提供表中插入的第一行。引用文献资料
当rowid被分配到一行后,rowid可能在特殊情况下发生变化。例如,如果启用了行移动,那么rowid可以更改,因为分区键更新、Flashback表操作、收缩表操作等等。如果禁用行移动,则如果使用Oracle数据库实用程序导出和导入行,则rowid可以更改。
“以此类推”的意思是,有许多原因会导致罗威德的改变。这可以很容易地通过一个小例子来演示:
create table tmp_test ( a number );
insert into tmp_test values (1);
select rowid, a from tmp_test;
ROWID A
------------------ ----------
AABo3AAFvAAAda6AAA 1
alter table tmp_test move;
select rowid, a from tmp_test;
ROWID A
------------------ ----------
AABo3BAFvAAAdbjAAA 1您会注意到,在alter table操作之后,唯一的rowid发生了变化。
如果rowid可以更改,并且由于Oracle没有显式地保证“最低”rowid始终是插入的第一行,那么如果需要的话,您应该有另一种跟踪方法。时间戳或递增序列将是正常的。
在不引用任何数据的情况下找到第一个插入的行一定是一个非常不寻常的要求。如果这是你正在考虑使用的东西,我会再看看你为什么要这么做。
发布于 2014-06-06 08:19:50
min(ROWID)将始终返回表的第一行。
对于数据库中的每一行,ROWID伪returns返回该行的地址。Oracle数据库rowid值包含定位行所需的信息:
通常,rowid值唯一地标识数据库中的一行。但是,存储在同一个集群中的不同表中的行可以具有相同的rowid。
请访问官方网站这里了解更多细节。
https://stackoverflow.com/questions/24076911
复制相似问题