首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在内部生成oracle?

问如何在内部生成oracle?
EN

Stack Overflow用户
提问于 2014-06-06 07:56:27
回答 2查看 6.2K关注 0票数 3

我想知道,oracle中的ROWID是否是递增生成的?如果我尝试下面的查询

代码语言:javascript
复制
select min(ROWID) from table

我将始终在表中获得第一个插入行的ROWID,还是可能最终得到任意随机行的ROWID?如果有人能把这件事弄清楚,那会很有帮助的。

EN

回答 2

Stack Overflow用户

发布于 2014-06-06 12:37:00

“最小”rowid将--可能不是--总是提供表中插入的第一行。引用文献资料

当rowid被分配到一行后,rowid可能在特殊情况下发生变化。例如,如果启用了行移动,那么rowid可以更改,因为分区键更新、Flashback表操作、收缩表操作等等。如果禁用行移动,则如果使用Oracle数据库实用程序导出和导入行,则rowid可以更改。

“以此类推”的意思是,有许多原因会导致罗威德的改变。这可以很容易地通过一个小例子来演示:

代码语言:javascript
复制
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始终是插入的第一行,那么如果需要的话,您应该有另一种跟踪方法。时间戳或递增序列将是正常的。

在不引用任何数据的情况下找到第一个插入的行一定是一个非常不寻常的要求。如果这是你正在考虑使用的东西,我会再看看你为什么要这么做。

票数 5
EN

Stack Overflow用户

发布于 2014-06-06 08:19:50

min(ROWID)将始终返回表的第一行。

对于数据库中的每一行,ROWID伪returns返回该行的地址。Oracle数据库rowid值包含定位行所需的信息:

  1. 对象的数据对象号。
  2. 行所在的数据文件中的数据块。
  3. 数据块中该行的位置(第一行为0)
  4. 行所在的数据文件(第一个文件为1)。文件号相对于表空间。

通常,rowid值唯一地标识数据库中的一行。但是,存储在同一个集群中的不同表中的行可以具有相同的rowid。

请访问官方网站这里了解更多细节。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24076911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档