OracleのROWIDとは?疑似列って何?

OracleのROWID

OracleのROWIDについて解説します。

Oracleのテーブルには疑似列「ROWID」があります。これはテーブルを作成すると、内部的に作られる疑似列です。

Oracleの「ROWID」は疑似列という名前のとおり、仮の列・隠し列になっており、通常は表示されません。

「ROWID」は行のアドレスになっています。ある意味、真の「キー」なんですね。

ROWIDの特徴

OracleのROWIDの特徴はこのようになっております。

  1. ROWIDは検索が速い
  2. ROWIDは一意
  3. ROWIDは更新できない

Oracleは索引でも内部的にROWIDを使っています。ROWIDは検索が速いのが特徴です。

そして、ROWIDは18桁の1意な文字列です。18桁の中には、データオブジェクト番号、相対ファイル番号、ブロック番号、行番号などを含んでいます。

またROWIDはORACLE内部で処理されるため、SELECTはできますがINSERTやUPDAETはできません。

ROWIDの注意点

ROWIDは変わることがあるので注意が必要です。例えば、行を削除してバックアップから戻す場合などはROWIDが変わる可能性があります。

なのでROWIDを元にした処理は注意が必要です。

ROWIDを取得する

--ROWIDを取得できない
SELECT * FROM emp; 

SELECTで「*」としてもROWIDは表示されません。

--ROWIDは取得できる
SELECT rowid,empno FROM emp; 
rowid empno
 AAAACOAABAAAAWJAAA A001
 AAAACOAABAAAAWJAAB A002
 AAAACOAABAAAAWJACZ A003

ROWIDをSELECTする場合は、このように「ROWID」を明示しないといけません。

 

参照:ROWID疑似列 – Oracle Docs 

以上、OracleのROWIDとは?疑似列って何?を解説しました。

 

コメント