10

Oracle/SQL の ROWID のデータ型は何ですか? この値はどのように保存されますか?

4

3 に答える 3

9

次のリンクでは、ROWID のデータ型について説明しています - ROWID データ型

ROWID は疑似列として格納されます

于 2012-07-23T12:15:12.907 に答える
2

ROWID (Oracle8 では拡張 ROWID と呼ばれていたため、Oracle7 では制限付き ROWID と呼ばれるようになりました) は、行の物理的な位置を格納/エンコードします。

(拡張) ROWID は、次のフィールドを (16 進形式で) エンコードします: OBJID (行が属するオブジェクトの一意の ID)、FILENO (オブジェクトが作成される TABLESPACE 内の相対ファイル番号)、BLOCKNO (相対ブロックファイル内の番号)、および ROWNUM (ブロック内の行の相対番号)。

(制限された) ROWID には FILENO (データベース内の相対ファイル番号)、BLOCKNO および ROWNUM (拡張 ROWID と同様) のみが含まれ、OBJID は含まれません。

いつでも、ROWID はデータベース内の行を一意にエンコードします (おそらく、同じ ROWID を共有するクラスター化されたテイルを除きます)。ROWID は (データベースの再編成により) 変更される場合があり、再利用される場合もあります (たとえば、削除と挿入の後、新しい行が ROWID を再利用する場合があります)。また、テーブルをエクスポート/インポートすると、テーブルの新しい ROWID が再割り当てされます。

FILENO は、拡張 ROWID 形式のデータベースごとに必ずしも一意であるとは限りませんが、拡張形式には OBJID (テーブル オブジェクトのセグメントが格納されているテーブルスペースを一意に識別する) も含まれているため、一意のファイルを見つけることができます。

BLOCKNO はデータベース ファイルごとに一意であり、ROWNUM はデータベース ブロックごとに一意です。

例外: 索引編成表 - 索引の再編成 (リーフ・ブロックの移動) のため、ROWID は正確なブロックを見つけることができません。

ROWID は、データベースの再編成操作により変更される場合があります。

于 2016-12-07T00:13:55.513 に答える