我想知道oracle中的ROWID是增量生成的吗?
如果我尝试下面的查询
select min(ROWID) from table
我是否总是会获得表中第一个插入行的 ROWID,还是最终可能会获得任何随机行的 ROWID?
如果有人能阐明这一点,那将非常有帮助
“最小”rowid 将可能不会始终提供表中第一个插入的行。引用自文档:
rowid分配给行片后,特殊情况下rowid可以改变。例如,如果启用了行移动,则 rowid 可能会因分区键更新、闪回表操作、收缩表操作等而发生更改。如果禁用行移动,则在使用 Oracle 数据库实用程序导出和导入行时,rowid 可能会更改。
The “等等”表示有很多原因会导致 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 始终是第一个插入的行,那么如果需要,您应该有另一种方法来跟踪这一点。时间戳或递增序列是正常的。
在不引用任何数据的情况下找到第一个插入的行一定是一个非常不寻常的要求。如果这是您正在考虑使用的东西,我会再看一下why你需要这样做。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)