1

我正在自治数据仓库上开发一个应用程序,该应用程序必须使用 rowid 字段来识别必须更新的特定行。不幸的是,我注意到当我更新一行时 rowid 发生了变化。这是预期的吗?有没有办法禁用这种行为?

4

1 回答 1

1

自治数据仓库默认使用混合列压缩压缩所有表。更新此类表中的行可以更改 ROWID。这是一个显示 ROWID 如何更改的示例。

SQL> create table t as select * from all_objects;

Table created.

SQL> select object_id,rowid from t where rownum=1;

 OBJECT_ID ROWID
---------- ------------------
     9 AABYq5AAAAAABDTAAA

SQL> update t set object_name='X' where object_id=9;

1 row updated.

SQL> commit;

Commit complete.

SQL> select object_id,rowid from t where object_id=9;

 OBJECT_ID ROWID
---------- ------------------
     9 AABYq5AAAAAABGVAAA

您可以将表创建为未压缩以避免它。

SQL> create table t nocompress as select * from all_objects;

Table created.

或者,作为更好的选择,您可以使用一个或多个列来标识要更新的行,而不是依赖于 ROWID。在上面的示例中,我可以使用 OBJECT_ID 列来查找行,因为该列具有唯一值。

于 2021-10-05T20:49:04.440 回答